3 回答

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
是的,它們會(huì)保護(hù)你的安全,但前提是它們的使用是絕對(duì)正確的。如果不正確地使用它們,您將仍然容易受到攻擊,并且可能會(huì)出現(xiàn)其他問(wèn)題(例如,數(shù)據(jù)損壞)。 請(qǐng)改用參數(shù)化查詢(如上文所述)。您可以通過(guò)例如PDO或PEARDB之類的包裝器使用它們。 確保魔術(shù)_引號(hào)_gpc和魔術(shù)_引號(hào)_運(yùn)行時(shí)在任何時(shí)候都是關(guān)閉的,并且不會(huì)意外地打開(kāi),甚至不會(huì)被短暫地打開(kāi)。這些都是PHP開(kāi)發(fā)人員為防止安全問(wèn)題(破壞數(shù)據(jù))而進(jìn)行的一次早期和嚴(yán)重錯(cuò)誤的嘗試。

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
當(dāng)涉及到數(shù)據(jù)庫(kù)查詢時(shí),始終嘗試并使用準(zhǔn)備好的參數(shù)化查詢。mysqli和PDO庫(kù)支持這一點(diǎn)。這比使用轉(zhuǎn)義函數(shù)(如MySQL_REAL_EXECH_String)安全得多。
是的,MySQL_REARY_EXIFE_String實(shí)際上只是一個(gè)字符串轉(zhuǎn)義函數(shù)。這不是一顆神奇的子彈。它所要做的就是轉(zhuǎn)義危險(xiǎn)字符,以便它們可以安全地在單個(gè)查詢字符串中使用。但是,如果您不事先清理您的輸入,那么您將容易受到某些攻擊向量的攻擊。
想象一下下面的SQL:
$Response=“從表中選擇字段id=”.mysql_Real_EXECH_String($_POST[‘id’]);
您應(yīng)該能夠看到這很容易被利用。假設(shè)id參數(shù)包含公共攻擊向量:
1或1=1
沒(méi)有危險(xiǎn)的字符在那里編碼,所以它將直接通過(guò)轉(zhuǎn)義過(guò)濾器。離開(kāi)我們:
從表中選擇字段,其中id=1或1=1
function Numbers($input) { $input = preg_replace("/[^0-9]/","", $input); if($input == '') $input = 0; return $input;}
$Resue=“從表中選擇字段,其中id=”.mysqlrealfreestring(“1 or 1=1”);
$READ=“從表中選擇字段,其中id=”.Numbers(“1 or 1=1”);
從表中選擇字段,其中id=111
- 3 回答
- 0 關(guān)注
- 771 瀏覽
添加回答
舉報(bào)