PHP中addslashes()和htmlspecialchars() 函數的區別及應用

addslashes()防sql注入:php

定義以下:html

addslashes() 函數返回在預約義字符以前添加反斜槓的字符串。sql

預約義字符是:數據庫

  • 單引號(')
  • 雙引號(")
  • 反斜槓(\)
  • NULL

提示:該函數可用於爲存儲在數據庫中的字符串以及數據庫查詢語句準備字符串。cookie

用法以下:函數

<?php
$str = "Who's Peter Griffin?";
echo $str . " This is not safe in a database query.<br>";
echo addslashes($str) . " This is safe in a database query.";
?>  
// 輸出:
Who's Peter Griffin? This is not safe in a database query.
Who\'s Peter Griffin? This is safe in a database query.

htmlspecialchars()過濾XSS問題:post

定義以下:spa

htmlspecialchars() 函數把預約義的字符轉換爲 HTML 實體。code

預約義的字符是:htm

  • & (和號)成爲 &
  • " (雙引號)成爲 "
  • ' (單引號)成爲 '
  • < (小於)成爲 <
  • > (大於)成爲 >

提示:如需把特殊的 HTML 實體轉換回字符,請使用 htmlspecialchars_decode() 函數。

用法以下:

<?php
$str = "Bill & 'Steve'";
echo htmlspecialchars($str, ENT_COMPAT); // 只轉換雙引號
echo "<br>";
echo htmlspecialchars($str, ENT_QUOTES); // 轉換雙引號和單引號
echo "<br>";
echo htmlspecialchars($str, ENT_NOQUOTES); // 不轉換任何引號
?>
// 輸出
Bill & 'Steve'
Bill & 'Steve'
Bill & 'Steve'

addslashes()與htmlspecialchars()的區別:

除了兩個函數的轉義方式不一樣外,它們的使用也不一樣。

addslashes()經過用於防止sql語句注入,在執行sql語句前對經過get、post和cookie傳遞來的參數中的單引號,雙引號,\ 和null進行轉義。

但sql執行成功後,插入到數據庫中的數據是不帶有轉義字符\的。這是若是插入到數據庫中的是一些js腳本,當這些腳本被讀取出來時仍是會被執行。

這是咱們可對讀取出來的數據使用htmlspecialchars()進行過濾,避免執行被注入的腳本。

 

參考文章:

http://www.javashuo.com/article/p-cluksugh-bw.html

相關文章
相關標籤/搜索