在防止被注入攻擊時,常會用到兩個函數:htmlspecialchars()和addslashes()函數。這兩個函數都是對特殊字符進行轉義。html
1)addslashes()做用及使用sql
addslashes()一般用於防止sql注入,它可對經過get,post和cookie傳遞過來的參數的單引號和雙引號已經null前加「\」進行轉義數據庫
如:如變量$str=$_POST["str"];的值爲:bb' or 1='1。經過addslashes()函數過濾後會變爲:bb\' or 1=\'1;cookie
2)htmlspecialchars()做用及使用xss
htmlspecialchars()也是對字符進行轉義,與addslashes()不一樣的是htmlspecialchars()是將特殊字符用引用實體替換。函數
如<script>alert('xss')</script>經過htmlspecialchars()過濾後爲<script>alert('xss')</script>post
3)addslashes()與htmlspecialchars()的區別htm
除了兩個函數的轉義方式不一樣外,它們的使用也不一樣。ip
addslashes()經過用於防止sql語句注入,在執行sql語句前對經過get、post和cookie傳遞來的參數中的單引號,雙引號,\ 和null進行轉義。ci
但sql執行成功後,插入到數據庫中的數據是不帶有轉義字符\的。這是若是插入到數據庫中的是一些js腳本,當這些腳本被讀取出來時仍是會被執行。
這是咱們可對讀取出來的數據使用htmlspecialchars()進行過濾,避免執行被注入的腳本。