2012-03-08 93 views
-2

我一直在使用php/mysql一段時間,我想在程序的開始處清理所有超級全局變量,但尚未連接到任何數據庫。是否有任何其他PHP定義的函數使變量sql安全。任何人都可以告訴我爲什麼使用mysql_real_escapce_string前需要一個活動的mysql連接

+0

http://stackoverflow.com/questions/1162491/alternative-to-mysql-real-escape-string-without-connecting-to-db – silly 2012-03-08 09:51:59

回答

3

我想在程序開始時清理所有超級全局變量。

這不是最好的主意。你應該根據上下文清理變量。如果通過mysql_real_escape_string()運行所有變量,則當您想在SQL上下文之外使用變量時,可能會發現問題。

是否有任何其他PHP定義的函數使變量SQL安全?

您可以在庫中使用綁定參數,如PDO

誰能告訴我爲什麼在使用mysql_real_escape_string()之前需要激活MySQL連接?

我相信這是因爲函數需要知道數據庫正在使用的字符集,因此它可以正確地轉義。

0

這個想法是完全錯誤的。

  1. 做散裝消毒沒有意義。事實上,你正試圖重塑在上一個版本中最終被禁止使用該語言的臭名昭着的魔術引號功能。想想看。
  2. 「mysql_real_escape_sequence」無論如何不會使「數據」「安全」

使用mysql_real_escape_string(),您只能轉義SQL字符串。當時他們正在查詢。 任何字符串,不只是一個來自請求。想想看。

+0

謝謝你的答案先生,但你是什麼意思的「不使數據安全「。函數mysql_real_escape_sequence是否處理所有可能的mysql注入。 – 2012-07-06 12:45:47

+0

這並非完全錯誤。在任何代碼開始時清理輸入是一個好主意 - 無論你做什麼,它都更安全。不,魔術報價並未因大宗消毒而被禁止 - 魔術報價被禁止,因爲人們沒有進行消毒。 – unity100 2013-02-28 22:14:09

相關問題