PHP安全性防範方式

SQL注入

SQL注入是一種惡意攻擊,用戶利用在表單字段輸入SQL語句的方式來影響正常的SQL執行。php

防範方式

  • 使用mysql_real_escape_string(),或者addslashes()過濾數據
  • 手動檢查每一數據是否爲正確的數據類型
  • 使用預處理語句並綁定變量
  • 使用準備好的預處理語句
  • 分離數據和SQL邏輯
  • 預處理語句將自動過濾(如:轉義)
  • 把它做爲一個編碼規範,能夠幫助團隊裏的新人避免遇到以上問題
相比於直接執行SQL語句,預處理語句有兩個主要優勢
  • 預處理語句大大減小了分析時間,只作了一次查詢(雖然語句屢次執行)。
  • 綁定參數減小了服務器帶寬,你只須要發送查詢的參數,而不是整個語句。
  • 預處理語句針對SQL注入是很是有用的,由於參數值發送後使用不一樣的協議,保證了數據的合法性。
而在PHP當中,使用預處理語句主要有兩種方法
  • 使用mysqli數據庫
  • 使用PDOStatement類對象

查詢只須要被解析(或準備)一次,但能夠使用相同或不一樣的參數執行屢次。當查詢準備好(Prepared)以後,數據庫就會分析,編譯並優化它要執行查詢的計劃。對於複雜查詢來講,若是你要重複執行許屢次有不一樣參數的但結構相同的查詢,這個過程會佔用大量的時間,使得你的應用變慢。經過使用一個預處理語句你就能夠避免重複分析、編譯、優化的環節。簡單來講,預處理語句使用更少的資源,執行速度也就更快。html

服務器的措施
  • 關於SQL注入,不得不說的是如今大多虛擬主機都會把magic_quotes_gpc選項打開,在這種狀況下全部的客戶端GET和POST的數據都會自動進行addslashes處理,因此此時對字符串值的SQL注入是不可行的,但要防止對數字值的SQL注入,如用intval()等函數進行處理。但若是你編寫的是通用軟件,則須要讀取服務器的magic_quotes_gpc後進行相應處理。

XSS攻擊

XSS(跨站點腳本攻擊)是一種攻擊,由用戶輸入一些數據到你的網站,其中包括客戶端腳本(一般JavaScript)。若是你沒有過濾就輸出數據到另外一個web頁面,這個腳本將被執行。mysql

防範方式

是針對非法的HTML代碼包括單雙引號等,使用htmlspecialchars()函數 。web

在使用htmlspecialchars()函數的時候注意第二個參數, 直接用htmlspecialchars($string) 的話,第二個參數默認是ENT_COMPAT,函數默認只是轉化雙引號(「), 不對單引號(‘)作轉義.sql

因此,htmlspecialchars函數更多的時候要加上第二個參數, 應該這樣用: htmlspecialchars($string,ENT_QUOTES).固然,若是須要不轉化如何的引號,用htmlspecialchars($string,ENT_NOQUOTES).數據庫

另外, 儘可能少用htmlentities, 在所有英文的時候htmlentities和htmlspecialchars沒有區別,均可以達到目的.可是,中文狀況下, htmlentities卻會轉化全部的html代碼,連同裏面的它沒法識別的中文字符也給轉化了。服務器

htmlentities和htmlspecialchars這兩個函數對 '之類的字符串支持很差,都不能轉化, 因此用htmlentities和htmlspecialchars轉化的字符串只能防止XSS攻擊,不能防止SQL注入攻擊.函數

代碼注入

代碼注入是利用計算機漏洞經過處理無效數據形成的。問題出在,當你不當心執行任意代碼,一般經過文件包含。寫得很糟糕的代碼能夠容許一個遠程文件包含並執行。如許多PHP函數,如require能夠包含URL或文件名優化

防範方式

  • 過濾用戶輸入
  • 在php.ini中設置禁用allow_url_fopen和allow_url_include。這將禁用require/include/fopen的遠程文件。

文章參考:
https://blog.csdn.net/tim_php...
https://blog.csdn.net/come_on...
https://www.cnblogs.com/wt645...網站

相關文章
相關標籤/搜索