在開發(fā)一個應用軟件的時候,安全性其實一直都是一個平時見不到,但是一旦出現(xiàn)就非常要命的問題,在軟件開發(fā)中比較常見的就是XSS(跨站腳本攻擊),是一種常見的網(wǎng)絡安全漏洞,攻擊者通過在網(wǎng)頁中注入惡意腳本,當其他用戶瀏覽該頁面時,這些腳本會在用戶的瀏覽器中執(zhí)行。XSS攻擊通常分為三類:反射型(惡意腳本來自當前HTTP請求)、存儲型(惡意腳本被保存到服務器數(shù)據(jù)庫中)和DOM型(通過修改頁面DOM樹觸發(fā))。攻擊者可利用XSS竊取用戶Cookie、會話令牌等敏感信息,篡改網(wǎng)頁內容,甚至進行釣魚欺詐。
那么如何才能防御這種網(wǎng)絡攻擊呢,在PHP中htmlspecialchars函數(shù)就是抵御這類攻擊的核心方法。
htmlspecialchars的核心功能
htmlspecialchars()函數(shù)將HTML中的特殊字符轉換為對應的HTML實體,使瀏覽器將這些字符識別為普通文本而非可執(zhí)行代碼:
他會把字符進行轉換,轉換規(guī)則:
< 轉換為 <
> 轉換為 >
" 轉換為 "
' 轉換為 ' (當使用ENT_QUOTES時)
& 轉換為 &
這樣轉換之后帶代碼,通過特殊字符實體化之后,內容始終被解釋為文本數(shù)據(jù)而非可執(zhí)行代碼,這樣就沒有辦法通過這樣的方式來攻擊我們的程序。
那么必須使用htmlspecialchars的場景有哪些呢?
1. 用戶生成內容輸出
當顯示用戶提交的文本(如評論、留言、用戶名)時,必須使用htmlspecialchars:
2. 表單值回顯
在表單提交后回顯用戶輸入時,防止惡意腳本執(zhí)行:
3. 動態(tài)生成HTML屬性
當變量值用于HTML屬性時,防范屬性注入攻擊:
由此可以得到一些結論,在將任何不可信數(shù)據(jù)輸出到HTML上下文時,必須使用htmlspecialchars進行轉義