php安全性問題


常見攻擊類型

1.sql注入:

攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的字符串,欺騙服務器執行惡意的SQL命令。

防范方法:

  • 1.檢查變量數據類型和格式
  • 2.過濾特殊符號
  • 3.綁定變量,使用預處理語句

2.xss攻擊

XSS其實就是Html的注入問題,攻擊者的輸入沒有經過嚴格的控制進入了數據庫,最終顯示給來訪的用戶,導致可以在來訪用戶的瀏覽器里以瀏覽用戶的身份執行Html代碼,

數據流程如下:攻擊者的Html輸入—>web程序—>進入數據庫—>web程序—>用戶瀏覽器。

防范方法:使用htmlspecialchars函數將特殊字符轉換成HTML編碼,過濾輸出的變量

3.csrf攻擊:

CSRF 顧名思義,是偽造請求,冒充用戶在站內的正常操作。我們知道,絕大多數網站是通過 cookie 等方式辨識用戶身份(包括使用服務器端 Session 的網站,因為 Session ID 也是大多保存在 cookie 里面的),再予以授權的。所以要偽造用戶的正常操作,最好的方法是通過 XSS 或鏈接欺騙等途徑,讓用戶在本機(即擁有身份 cookie 的瀏覽器端)發起用戶所不知道的請求。

要完成一次CSRF攻擊,受害者必須依次完成兩個步驟:

  • 1.登錄受信任網站A,並在本地生成Cookie。
  • 2.在不登出A的情況下,訪問危險網站B。

XSS 是實現 CSRF 的諸多途徑中的一條,但絕對不是唯一的一條。一般習慣上把通過 XSS 來實現的 CSRF 稱為 XSRF。因為網站A有漏洞,當我們訪問的時候,可能已經被注入了訪問危險網站B的操作

防范方法:

  • 1、檢查網頁的來源,比如laravel使用令牌
  • 2、檢查內置的隱藏變量
  • 3、使用POST,不要使用GET,處理變量也不要直接使用$_REQUEST

php安全三板斧:過濾輸入、驗證數據,以及轉義輸出。

1.數據過濾:

過濾輸入是指轉義或刪除不安全的字符。在數據到達應用的存儲層之前,一定要過濾輸入數據,這是第一道防線,

  • HTML

我們可以使用PHP提供的htmlentities函數過濾HTML,該函數會將所有HTML標簽字符(&、<、>等)轉化為對應的HTML實體,以便在應用存儲層取出后安全渲染。

  • SQL查詢

在SQL查詢中一定不能使用未過濾的輸入數據,如果要在SQL查詢中使用輸入數據,一定要使用PDO預處理語句(PDO是PHP內置的數據庫抽象層,為不同的數據庫驅動提供統一接口),PDO預處理語句是PDO提供的一個功能,可以用於過濾外部數據,然后把過濾后的數據嵌入SQL語句,避免出現上述SQL注入問題,此外預處理語句一次編譯多次運行,可以有效減少對系統資源的占用,獲取更高的執行效率。關於PDO后我們后續還會在數據庫部分重點討論。

值得注意的是,很多現代PHP框架都使用了MVC架構模式,將數據庫的操作封裝到了Model層,框架底層已經做好了對SQL注入的規避,只要我們使用模型類提供的方法執行對數據庫的操作,基本上可以避免SQL注入風險。

2.驗證數據:

可以php原生實現,借助php組件實現,laravel中是有專門的驗證類validation

3.轉義輸出:

把輸出渲染成網頁或API響應時,一定要轉義輸出,這也是一種防護措施,能避免渲染惡意代碼,造成XSS攻擊,還能防止應用的用戶無意中執行惡意代碼。

laravel中使用blade模板,模板引擎在底層已經為了做好了轉義處理

laravel 中如何避免csrf攻擊

用戶在網站b的時候發送了操作a網站的請求,同時a網站下已經有了cookie信息,所以是合法的。laravel通過csrf_token來進行判定是不是我們自己的網站訪問的,因為每次訪問都帶着這個token,如果是網站b過來的非法操作a網站請求,肯定不會帶着這個token,也就不合法了。

參考資料:

http://www.freebuf.com/articles/web/39234.html

http://www.cnblogs.com/luyucheng/p/6234524.html

http://laravelacademy.org/post/4610.html

http://laravelacademy.org/post/4628.html

http://laravelacademy.org/post/4699.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM