3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
你的問題的答案是否定的。沒有mysql_real_escape_string()不適合所有用戶輸入,mysql_real_escape_string()不會(huì)停止所有sql注入。addslashes()是另一個(gè)在php中使用的流行函數(shù),它也有同樣的問題。
弱勢(shì)代碼:
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)
補(bǔ)丁是在id周圍使用引號(hào):
mysql_query("select * from user where id='".mysql_real_escape_string($_GET[id])."'");
真正最好的方法是使用一些人們指出的參數(shù)化查詢。Pdo運(yùn)行良好,adodb是另一個(gè)流行的php庫。
如果你確實(shí)使用mysql_real_escape_string應(yīng)該只用于sql注入,而不是別的。漏洞高度依賴于數(shù)據(jù)的使用方式。人們應(yīng)該逐個(gè)功能地應(yīng)用安全措施。是的,XSS是一個(gè)非常嚴(yán)重的問題。不對(duì)html進(jìn)行過濾是一個(gè)嚴(yán)重的錯(cuò)誤,黑客會(huì)用它來解決你的問題。請(qǐng)閱讀xss常見問題解答。

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
對(duì)于數(shù)據(jù)庫,是的。您還需要考慮為輸出充分轉(zhuǎn)義/編碼數(shù)據(jù)。
您還應(yīng)該考慮根據(jù)預(yù)期驗(yàn)證輸入。
你考慮過使用準(zhǔn)備好的陳述嗎?PHP提供了許多與數(shù)據(jù)庫交互的方法。其中大多數(shù)都比mysql_ *函數(shù)更好。
PDO,MDB2和MySQL改進(jìn)應(yīng)該讓你入門。
- 3 回答
- 0 關(guān)注
- 747 瀏覽
添加回答
舉報(bào)