天天看點

PHP安全性防範方式

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

使用mysql_real_escape_string(),或者addslashes()過濾資料

手動檢查每一資料是否為正确的資料類型

使用預處理語句并綁定變量

使用準備好的預處理語句

分離資料和SQL邏輯

預處理語句将自動過濾(如:轉義)

把它作為一個編碼規範,可以幫助團隊裡的新人避免遇到以上問題

預處理語句大大減少了分析時間,隻做了一次查詢(雖然語句多次執行)。

綁定參數減少了伺服器帶寬,你隻需要發送查詢的參數,而不是整個語句。

預處理語句針對SQL注入是非常有用的,因為參數值發送後使用不同的協定,保證了資料的合法性。

使用mysqli資料庫

使用PDOStatement類對象

查詢隻需要被解析(或準備)一次,但可以使用相同或不同的參數執行多次。當查詢準備好(Prepared)之後,資料庫就會分析,編譯并優化它要執行查詢的計劃。對于複雜查詢來說,如果你要重複執行許多次有不同參數的但結構相同的查詢,這個過程會占用大量的時間,使得你的應用變慢。通過使用一個預處理語句你就可以避免重複分析、編譯、優化的環節。簡單來說,預處理語句使用更少的資源,執行速度也就更快。

關于SQL注入,不得不說的是現在大多虛拟主機都會把magic_quotes_gpc選項打開,在這種情況下所有的用戶端GET和POST的資料都會自動進行addslashes處理,是以此時對字元串值的SQL注入是不可行的,但要防止對數字值的SQL注入,如用intval()等函數進行處理。但如果你編寫的是通用軟體,則需要讀取伺服器的magic_quotes_gpc後進行相應處理。

XSS(跨站點腳本攻擊)是一種攻擊,由使用者輸入一些資料到你的網站,其中包括用戶端腳本(通常JavaScript)。如果你沒有過濾就輸出資料到另一個web頁面,這個腳本将被執行。

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

在使用htmlspecialchars()函數的時候注意第二個參數, 直接用htmlspecialchars($string) 的話,第二個參數預設是ENT_COMPAT,函數預設隻是轉化雙引号(“), 不對單引号(‘)做轉義.

是以,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的遠端檔案。