安全性問題是程式語言中需要考慮的重要部分,幾乎在任何一種實際的語言中都會提供一些函數,模組,或其它確保安全的功能。在現代網路中,我們經常要從世界各地的使用者那裡取得輸入資料。但是,我們都知道「永遠不能相信那些使用者輸入的資料」。所以在各種的Web開發語言中,都會提供保證使用者輸入資料安全的函數。今天,我們就來看看作為最著名的開源語言PHP中提供的這樣的函數。
在PHP中,有些非常有用且方便的函數,它們可以幫助你的網站防止像SQL注入攻擊,XSS攻擊等問題。讓我們看看這些在PHP中可以保證專案安全的函數,下面列出的這些函數只是我發現的對你專案有幫助的,可能會不全。
1. mysql_real_escape_string()
這個函數對於在PHP中防止SQL注入攻擊很有幫助,它對特殊的字符,像單引號和雙引號,加上了“反斜杠”,確保用戶的輸入在用它去查詢以前已經是安全的了。但你要注意你是在連接資料庫的情況下使用這個函數。
但現在mysql_real_escape_string()這個函數基本上不用了,所有新的應用開發都應該使用像PDO這樣的函式庫對資料庫進行操作,也就是說,我們可以使用現成的語句來防止SQL注入攻擊。
2. addslashes()
這個函數和上面的mysql_real_escape_string()很像。但要注意當設定檔php.ini中的magic_quotes_gpc的值為「on」時,不要使用這個函數。預設情況下, magic_quotes_gpc 為 on,對所有的 GET、POST 和 COOKIE 資料自動執行 addslashes()。不要對已經被 magic_quotes_gpc 轉義過的字串使用 addslashes(),因為這樣會導致雙層轉義。你可以透過PHP中get_magic_quotes_gpc()函數檢查這個變數的值。
3. htmlentities()
這個函數對過濾使用者輸入資料非常有用,它可以將字元轉換為 HTML 實體。例如,當使用者輸入字元「
4. htmlspecialchars()
HTML中的一些字元有著特殊的意義,如果要體現這樣的意義,就會被轉換為HTML實體,這個函數會傳回轉換後的字串,例如,'就要被轉換為HTML實體,這個函數會傳回轉換後的字串,例如,' &'amp會轉為'&'。
5. strip_tags()
這個函數可以去除字串中所有的HTML,JavaScript和PHP標籤,當然你也可以透過設定該函數的第二個參數,讓一些特定的標籤出現。
6. md5()
部分開發者儲存的密碼非常簡單,這從安全的角度來看是不好的,md5()函數可以產生給定字串的32個字元的md5散會列,而且這個過程不可逆,即你不能從md5()的結果得到原始字串。
7. sha1()
這個函數和上面的md5()相似,但是它使用了不同的演算法,產生的是40個字元的SHA-1雜湊(md5產生的是32個字元的雜湊)。
8. intval()
不要笑,我知道這不是一個安全相關的函數,它是將變數轉換為整數型別。但是,你可以用這個函數讓你的PHP程式碼更安全,特別是當你在解析id,年齡這樣的資料時。