Web 開發中,用戶在表單中輸入的字元都應該經過哪些處理?

PHP中,我知道有 htmlspecialchars(),處理&<&>等字元的;還有nl2br(),把/r/n轉換成&
。還有其它的嗎?空格如何處理?比如段前縮進,提交到資料庫再在前台顯示的話就沒有了。


我認為應該有這麼兩個層次:

1. 滿足業務需求的驗證

業務是多種多樣的,所以字元串具體需要滿足那些需求,這得根據實際業務來處理,例如要求用戶提供郵箱地址,那麼字元串就必須滿足電子郵件地址的格式。

2. 滿足安全規範的驗證

客戶提交到伺服器端的信息可能包含惡意代碼,例如SQL Injection攻擊代碼,Cross-Site Scripting攻擊代碼等等。我們得根據不同的安全風險對輸入信息進行相應的驗證和處理。

例如針對SQL Injection的防護,我們得過濾掉一些特殊字元,如:

『(單引號)

;(分號)

/* (注釋符號)等等

(針對SQL Injection的防護絕不僅僅是過濾掉幾個特殊字元就完事兒了,比較完備的防護請參考這裡 https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet)

再例如針對Cross-Site Scripting的防護,比較推薦的辦法是在「用戶提交的信息會被顯示出來的頁面」進行「輸出編碼」。說起來可能比較費勁,詳細防護信息請看這裡 https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

Web安全越來越受到重視,這是個好兆頭。如果你有興趣,推薦可以到這裡看看常見的Web安全威脅。 https://www.owasp.org/index.php/Top_10_2010-Main


如果是輸出到網頁內容,要經過&<&>等特殊字元串替換,比如php裡面用htmlspecialchars。另外注意是否影響美觀,比如輸出一些特殊的字元。

如果要存到資料庫,則注意轉義下back-slash ()

長度檢查。


&alert(1)&


推薦閱讀:

科班計算機it從業者,都學些什麼?
github上有哪些值得學習的優秀的php開源項目?
如何用php 編寫網路爬蟲?
有什麼是 Python 可以做,但是 PHP 不可以做的?
PHP socket通信問題, 如何按照自定義的協議進行通信?

TAG:Web開發 | 前端開發 | JavaScript | Python | PHP | 後端技術 |