簡體   English   中英

參數charset為utf-8時,在PHP中使用addlashes是否安全?

[英]Is it safe using addslashes in php when parameter charset is utf-8?

我讀過許多關於addlashes對於SQL注入都不安全的文章,但是它們都使用GBK編碼引用相同的示例。 所以我的問題是:當參數charset為utf-8時,使用addslashes()防止在PHP中進行SQL注入是否安全?

實際上,有兩個問題合而為一。 因此,最好分別給它們發聲。

對於這個問題

如果charset是utf8,使用addslashes()是否安全?

答案是肯定的,這很安全。
如果單獨使用一個單獨的示例,如果您的字符集為utf8 ,則添加斜線可以產生一個安全序列以用於SQL字符串文字。

但是,作為一種保護措施,通常被用來“處理所有輸入數據以使其安全”,這被證明是絕對不安全的。 哪個問題

使用addlashes()防止SQL注入是否安全?

使其成為唯一答案:

沒門!

僅僅因為這種誠實的功能與防止任何注射無關。 從來沒有。

您必須了解的主要威脅不是半神秘的GBK漏洞,而是完全由濫用此功能引起的。 因為它並不是要保護您免受注射傷害。 保護的主題比簡單的字符串轉義要復雜得多。

問題是要記住很多規則 還有很多可能的失敗點。

出於這些原因,簡單的字符串轉義不能視為全方位的保護規則。

從這個角度來看,參數化查詢雖然不提供100%的保護,但無論如何都可以認為是一種更好的方法,可以消除三種最危險的威脅:

  • 因為數字也包含在內,所以無法通過數字文字注入
  • 由於格式完整,錯誤地轉義的標識符不是違規,而是開發階段錯誤。
  • 由於自動格式化,消除了人為錯誤

以上我認為這三個理由足以改變您的方法。

此外,正確實現的參數化查詢可以使您的代碼更加整潔。 給我您的基於addlashes的代碼段,我將向您展示如何使其縮短3-5倍且更簡潔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM