對php安全有幫助的一些函數

安全一直是一個在編程語言中非常值得去關注的方面。在任何一種成熟的編程語言中都有合適的辦法來保證程序的安全性,在現代的 WEB 開發中,我們常常需 要去處理用戶的輸入。(那麼這時候,問題就來了)有一句編程格言是: 千萬不要相信用戶輸入的安全性。所以呢,今天就介紹一些在PHP 中最常用的為你的 代碼提供安全保護的方法。

在 PHP 中有許多方便的函數可以幫助你免於類似於 SQL注入,XSS攻擊。現在讓我們來看一下這些能夠給你的項目增加安全性的函數吧。但是,請注意,這裡只是一些常用的函數的列表,也許他們並不全面,但是我相信他們都是對你的項目是非常有幫助的。


mysql_real_escape_string( string  sqlQuery ) :

轉義 SQL 語句中使用的字元串中的特殊字元,並考慮到連接的當前字符集。一個非常有用的函數,可以有效地避免 SQL 注入。

 以下字元會被轉換:

 \x00,\n,\r,\,』,」,\x1a

 在執行sql語句之前,對要將執行的sql query 使用該函數處理,會將一些危 險扼殺在搖籃中。

 但是現在一般在較為成熟的項目中,一般比較推薦使用類似 PDO 這樣的資料庫持久層來處理所有的資料庫操作。他們代表著更為先進的資料庫操作處理技術,在安全性,數據讀寫的速度上逗比那些古老的 mysql_* api 強大了不少。

addslashes() : 

在將一些數據插入到資料庫中時,這個函數會非常有用,它可以在單引號前加上反斜杠,使得數據在插入時不會出現錯誤。但是它的使用與php.ini 中的一項設置有關係 —  magic_quotes_gpc

1. 對於PHP magic_quotes_gpc=on的情況, 我們可以不對輸入和輸出資料庫的字元串數據作addslashes()和stripslashes()的操作,數據也會正常顯示。

如果此時你對輸入的數據作了addslashes()處理,那麼在輸出的時候就必須使用stripslashes()去掉多餘的反斜杠。

2. 對於PHP magic_quotes_gpc=off 的情況

必須使用addslashes()對輸入數據進行處理,但並不需要使用stripslashes()格式化輸出,因為addslashes()並未將反斜杠一起寫入資料庫,只是幫助mysql完成了sql語句的執行。

【stripslashes() :刪除由 addslashes() 函數添加的反斜杠。】

htmlentities() :

一個非常有用的用來處理輸出的函數。它用來將一些可能導致XXS攻擊的字元轉化為html實體,這些字元在瀏覽器顯示的時候是正常的,但是當你查看它的源代碼時,實際上這些特殊字元必不會是他顯示的那樣,例如

輸出:

John & 『Adams』

源碼:

 

John & 'Adams';

 

輸出:

<>

源碼:

 

<>gt;

 

編碼這些符號,有效地避免了XSS 攻擊。

htmlspecialchars():

和上面的函數是一樣的,但是它更常用一些,因為 htmlentities() 是將所有的有在html 標準中定義了的字元轉換成他們對應的html實體,這樣會是你的輸出缺乏易讀性(html 實體列表 http://www.w3school.com.cn/tags/html_ref_entities.html)。所以呢,使用 htmlspecialchars() 只是將一些 預定義的字元(就是會導致出現問題的)轉換為html實體。例如:

  • & (和號) 成為 &

  • 」 (雙引號) 成為 」

  • 『 (單引號) 成為 『

  • < (小於) 成為 <

  • > (大於) 成為 >

所以,在一些項目中,我還是常常使用 htmlspecialchars() 來處理html 的輸出的。他在安全這一方面做得更具體一些。

strip_tags():  一般在輸出時使用,將HTML、XML 以及 PHP 的標籤剝去。

函數原型: strip_tags(string,allow)

String 代表輸入的字元串,allow 代表 不刪除的標籤,你可以通過 allow 來自定義過需要濾掉的標籤

md5() :

一個將字元串轉換為一個32位的哈希值的函數(不能逆向解密),任何一個字元串都能通過這個函數獲得一個唯一的32位字元串。但是,現在使用這個函數時, 需要注意有一些資料庫記錄了大量的md5 值,通過暴力枚舉的方式來破解你的密碼,所以在使用的時候,你可以先將你的原字元串加一層密,然後再使用 md5()哈希,會獲得更好的效果。

sha1() :

和md5() 和相似的一個函數,但是他使用不同的演算法生成一個 40個字元的字元串。可以在項目中考慮使用

intval() : 

也許你認為這個函數不是一個 security function。但是它在某些情況下可以很好地保護你的code。對從用戶收集到的一些數據例如 ID,password,username處理,也許可以消除一些安全隱患,畢竟這裡是重災區。


你可能還喜歡如下這些文章

20056700簽名
葫蘆娃的更多精彩文章請進入頻道: 20056700
  1. 運勢不好,不妨試試十大改運方法
  2. 十二星座不作會死的強迫症!看到第一個我就想笑了。
  3. 流線型躺椅
  4. 屬於雙腳的小吊床
  5. 一位媽媽給兒子拍了一組紅遍全球的照片,心都被融化了
  6. 工業用增強現實安全帽 Smart Helmet
  7. 有助於脊椎健康的創新座椅
  8. 13歲女孩遭繼母情人性侵兩年 繼母知情助紂為虐!還有人性嗎?!
  9. Web應用開發的七項原則
  10. 不適合在一起的幾大星座配對
  11. Knife Locker消毒與安全兼備的刀架
  12. 幫著爸媽防三高 常吃這些食物
  13. 自調高度體感辦公桌
  14. 全球首款智能防溺水穿戴設備 iSwimband
  15. 一款通過血液檢測多種癌症的設備  微RNA自檢設備
  16. 對php安全有幫助的一些函數
  17. 那些被吐槽最多的編程語言
  18. 飛利浦推出兩款智能醫療設備幫助患者減輕痛楚
  19. 他能否託付終生?10個標準幫你鑒別
  20. 2014年紅點獎獲獎作品 寶寶安全座椅
  21. 孩子3歲前,別弄丟他的安全感
  22. 什麼實用技能幫你告別單身貴族?
  1. 空中巴士,中國原創,又一次驚艷了全世界!
  2. 網站運營的基本思路-六部曲
  3. iPhone7已曝光,太炫了! 亮瞎眼!
  4. 醫學家稱人死後有「來生」 進入多元宇宙
  5. 人類無法再活千年 需尋找出路