PHP:mysql_real_escape_string是否足以清除用戶輸入?mysql_real_escape_string在大多數情況下是否足以清理用戶輸入?::編輯::我主要考慮的是防止SQL注入,但我最終想知道在應用mysql_real_escape_string之后是否可以信任用戶數據,或者我應該采取額外措施來清理數據,然后再將其傳遞給應用程序和數據庫。我知道清除HTML字符的位置很重要,但我不認為有必要信任用戶輸入。?
3 回答

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
你的問題的答案是否定的。沒有mysql_real_escape_string()不適合所有用戶輸入,mysql_real_escape_string()不會停止所有sql注入。addslashes()是另一個在php中使用的流行函數,它也有同樣的問題。
弱勢代碼:
mysql_query("select * from user where id=".mysql_real_escape_string($_GET[id]));
poc exploit:
http://localhost/sql_test.php?id=1 or sleep(500)
補丁是在id周圍使用引號:
mysql_query("select * from user where id='".mysql_real_escape_string($_GET[id])."'");
真正最好的方法是使用一些人們指出的參數化查詢。Pdo運行良好,adodb是另一個流行的php庫。
如果你確實使用mysql_real_escape_string應該只用于sql注入,而不是別的。漏洞高度依賴于數據的使用方式。人們應該逐個功能地應用安全措施。是的,XSS是一個非常嚴重的問題。不對html進行過濾是一個嚴重的錯誤,黑客會用它來解決你的問題。請閱讀xss常見問題解答。
添加回答
舉報
0/150
提交
取消