7個增強 PHP 程式安全函式
阿新 • • 發佈:2019-02-02
作為一個合格的PHP程式設計師,必須要牢記一句格言,那就是“永遠不能相信那些使用者輸入的資料”。在PHP中,有些很有用的函式開源非常方便的防止你的網站遭受各種攻擊,例如SQL注入攻擊,XSS(Cross Site Scripting:跨站指令碼)攻擊等。一起看看PHP中常用的確保安全的函式(注意,這並不是完整的列表)。
1. addslashes()
這個函式的原理跟mysql_real_escape_string()相似。但是當在php.ini檔案中,“magic_quotes_gpc“的值是“on”的時候,就不要使用這個函式。magic_quotes_gpc 的預設值是on,對所有的 GET、POST 和 COOKIE 資料自動執行 addslashes()。不要對已經被 magic_quotes_gpc 轉義過的字串使用 addslashes(),因為這樣會導致雙層轉義。你可以使用get_magic_quotes_gpc()函式來確定它是否開啟。
2. htmlentities()
這個函式對於過濾使用者輸入的資料非常有用。它會將一些特殊字元轉換為HTML實體。例如,使用者輸入“<“時,就會被該函式轉化為HTML實體‘<’,輸入>就被轉為實體‘>’HTML實體對照表:),可以防止XSS和SQL注入攻擊。
3. htmlspecialchars()
在HTML中,一些特定字元有特殊的含義,如果要保持字元原來的含義,就應該轉換為HTML實體。這個函式會返回轉換後的字串,例如‘&’轉為’&‘(ps:請參照第二點中的實體對照表連結)
這個函式可以去除字串中所有的HTML,JavaScript和PHP標籤,當然你也可以通過設定該函式的第二個引數,讓一些特定的標籤出現。
5. md5()
從安全的角度來說,一些開發者在資料庫中儲存簡單的密碼的行為並不值得推薦。md5()函式可以產生給定字串的32個字元的md5雜湊,而且這個過程不可逆,即你不能從md5()的結果得到原始字串。現在這個函式並不被認為是安全的,因為開源的資料庫可以反向檢查一個雜湊值的明文。你可以在這裡找到一個MD5雜湊資料庫列表
6. sha1()
這個函式與md5()類似,但是它使用了不同的演算法來產生40個字元的SHA-1雜湊(md5產生的是32個字元的雜湊)。也不要把絕對安全寄託在這個函式上,否則會有意想不到的結果。
7. intval()
intval()函式是將變數轉成整數型別,我們可以用這個函式讓你的PHP程式碼更安全,特別是當你在解析id,年齡這樣的資料時。
1. addslashes()
這個函式的原理跟mysql_real_escape_string()相似。但是當在php.ini檔案中,“magic_quotes_gpc“的值是“on”的時候,就不要使用這個函式。magic_quotes_gpc 的預設值是on,對所有的 GET、POST 和 COOKIE 資料自動執行 addslashes()。不要對已經被 magic_quotes_gpc 轉義過的字串使用 addslashes(),因為這樣會導致雙層轉義。你可以使用get_magic_quotes_gpc()函式來確定它是否開啟。
2. htmlentities()
這個函式對於過濾使用者輸入的資料非常有用。它會將一些特殊字元轉換為HTML實體。例如,使用者輸入“<“時,就會被該函式轉化為HTML實體‘<’,輸入>就被轉為實體‘>’HTML實體對照表:),可以防止XSS和SQL注入攻擊。
3. htmlspecialchars()
在HTML中,一些特定字元有特殊的含義,如果要保持字元原來的含義,就應該轉換為HTML實體。這個函式會返回轉換後的字串,例如‘&’轉為’&‘(ps:請參照第二點中的實體對照表連結)
本帖隱藏的內容
4. strip_tags()這個函式可以去除字串中所有的HTML,JavaScript和PHP標籤,當然你也可以通過設定該函式的第二個引數,讓一些特定的標籤出現。
5. md5()
從安全的角度來說,一些開發者在資料庫中儲存簡單的密碼的行為並不值得推薦。md5()函式可以產生給定字串的32個字元的md5雜湊,而且這個過程不可逆,即你不能從md5()的結果得到原始字串。現在這個函式並不被認為是安全的,因為開源的資料庫可以反向檢查一個雜湊值的明文。你可以在這裡找到一個MD5雜湊資料庫列表
6. sha1()
這個函式與md5()類似,但是它使用了不同的演算法來產生40個字元的SHA-1雜湊(md5產生的是32個字元的雜湊)。也不要把絕對安全寄託在這個函式上,否則會有意想不到的結果。
7. intval()
intval()函式是將變數轉成整數型別,我們可以用這個函式讓你的PHP程式碼更安全,特別是當你在解析id,年齡這樣的資料時。