目標(biāo)
本教程講解如何防御最常見的安全威脅:SQL 注入、操縱 GET 和 POST 變量、緩沖區(qū)溢出攻擊、跨站點(diǎn)腳本攻擊、瀏覽器內(nèi)的數(shù)據(jù)操縱和遠(yuǎn)程表單提交。
前提條件
本教程是為至少有一年編程經(jīng)驗(yàn)的 PHP 開發(fā)人員編寫的。您應(yīng)該了解 PHP 的語法和約定;這里不解釋這些內(nèi)容。有使用其他語言(比如 Ruby、Python 和 Perl)的經(jīng)驗(yàn)的開發(fā)人員也能夠從本教程中受益,因?yàn)檫@里討論的許多規(guī)則也適用于其他語言和環(huán)境。
安全性快速簡介
Web 應(yīng)用程序最重要的部分是什么?根據(jù)回答問題的人不同,對這個問題的答案可能是五花八門。業(yè)務(wù)人員需要可靠性和可伸縮性。IT 支持團(tuán)隊(duì)需要健壯的可維護(hù)的代碼。最終用戶需要漂亮的用戶界面和執(zhí)行任務(wù)時(shí)的高性能。但是,如果回答 “安全性”,那么每個人都會同意這對 Web 應(yīng)用程序很重要。
但是,大多數(shù)討論到此就打住了。盡管安全性在項(xiàng)目的檢查表中,但是往往到了項(xiàng)目交付之前才開始考慮解決安全性問題。采用這種方式的 Web 應(yīng)用程序項(xiàng)目的數(shù)量多得驚人。開發(fā)人員工作幾個月,只在最后才添加安全特性,從而讓 Web 應(yīng)用程序能夠向公眾開放。
結(jié)果往往是一片混亂,甚至需要返工,因?yàn)榇a已經(jīng)經(jīng)過檢驗(yàn)、單元測試并集成為更大的框架,之后才在其中添加安全特性。添加安全性之后,主要組件可能會停止工作。安全性的集成使得原本順暢(但不安全)的過程增加額外負(fù)擔(dān)或步驟。
本教程提供一種將安全性集成到 PHP Web 應(yīng)用程序中的好方法。它討論幾個一般性安全主題,然后深入討論主要的安全漏洞以及如何堵住它們。在學(xué)完本教程之后,您會對安全性有更好的理解。
主題包括:
SQL 注入攻擊
操縱 GET 字符串
緩沖區(qū)溢出攻擊
跨站點(diǎn)腳本攻擊(XSS)
瀏覽器內(nèi)的數(shù)據(jù)操縱
遠(yuǎn)程表單提交
Web 安全性 101
在討論實(shí)現(xiàn)安全性的細(xì)節(jié)之前,最好從比較高的角度討論