1. 程式人生 > >php

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註入問題,此外預處理語句一次編譯多次運行,可以有效減少對系統資源的占用,獲取更高的執行效率。   值得註意的是,很多現代PHP框架都使用了MVC架構模式,將數據庫的操作封裝到了Model層,框架底層已經做好了對SQL註入的規避,只要我們使用模型類提供的方法執行對數據庫的操作,基本上可以避免SQL註入風險。 2.驗證數據:
  可以php原生實現,借助php組件實現,laravel中是有專門的驗證類validation 3.轉義輸出:   把輸出渲染成網頁或API響應時,一定要轉義輸出,這也是一種防護措施,能避免渲染惡意代碼,造成XSS攻擊,還能防止應用的用戶無意中執行惡意代碼。   laravel中使用blade模板,模板引擎在底層已經為了做好了轉義處理 參考資料: 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

php