3 回答

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
嚴(yán)格來說,實(shí)際上不需要轉(zhuǎn)義,因?yàn)閰?shù)值永遠(yuǎn)不會(huì)插值到查詢字符串中。
查詢參數(shù)的工作方式是在調(diào)用時(shí)將查詢發(fā)送到數(shù)據(jù)庫服務(wù)器prepare(),然后在調(diào)用時(shí)將參數(shù)值發(fā)送到數(shù)據(jù)庫服務(wù)器execute()。因此,它們與查詢的文本形式分開存放。SQL注入永遠(yuǎn)不會(huì)有機(jī)會(huì)(提供的PDO::ATTR_EMULATE_PREPARES是錯(cuò)誤的)。
因此,可以,查詢參數(shù)可以幫助您避免這種形式的安全漏洞。
他們是否100%證明沒有任何安全漏洞?不,當(dāng)然不是。您可能知道,查詢參數(shù)僅在SQL表達(dá)式中代替單個(gè)文字值。您不能用單個(gè)參數(shù)替代值列表,例如:
SELECT * FROM blog WHERE userid IN ( ? );
您不能使用參數(shù)使表名或列名動(dòng)態(tài)化:
SELECT * FROM blog ORDER BY ?;
您不能將參數(shù)用于任何其他類型的SQL語法:
SELECT EXTRACT( ? FROM datetime_column) AS variable_datetime_element FROM blog;
因此,在很多情況下,您必須在prepare()調(diào)用之前將查詢作為字符串處理。在這些情況下,您仍然需要仔細(xì)編寫代碼以避免SQL注入。

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
從SQL注入是安全的。
幾件事情不安全:
拒絕服務(wù)(導(dǎo)致創(chuàng)建過多的行)
跨站點(diǎn)腳本攻擊(如果標(biāo)題回顯給另一個(gè)用戶)
安全不僅僅是阻止SQL注入。

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
關(guān)于SQL注入,我相信這是最安全的方法,尤其是在使用PDO :: PARAM_INT等常量的情況下。
添加回答
舉報(bào)