3 回答

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

TA貢獻1821條經驗 獲得超5個贊
當涉及到數據庫查詢時,始終嘗試并使用準備好的參數化查詢。mysqli和PDO庫支持這一點。這比使用轉義函數(如MySQL_REAL_EXECH_String)安全得多。
是的,MySQL_REARY_EXIFE_String實際上只是一個字符串轉義函數。這不是一顆神奇的子彈。它所要做的就是轉義危險字符,以便它們可以安全地在單個查詢字符串中使用。但是,如果您不事先清理您的輸入,那么您將容易受到某些攻擊向量的攻擊。
想象一下下面的SQL:
$Response=“從表中選擇字段id=”.mysql_Real_EXECH_String($_POST[‘id’]);
您應該能夠看到這很容易被利用。假設id參數包含公共攻擊向量:
1或1=1
沒有危險的字符在那里編碼,所以它將直接通過轉義過濾器。離開我們:
從表中選擇字段,其中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
添加回答
舉報