PHP SMARTY 樣板引擎
一、範例
<?php $img = "<img src='http://cdn.pingwest.com/wp-content/uploads/2015/07/hacker-big.jpg'>"; $script = "<script>alert('XSS')</script>"; //echo $img; //echo $script; //echo htmlspecialchars($img, ENT_QUOTES); //echo htmlspecialchars($script, ENT_QUOTES);
二、外來變數
- 用post方法傳過來的,我們用 $_POST['變數名稱'] 接收。
- 用get方法傳過來的,我們用 $_GET['變數名稱'] 接收。
- 用 $_REQUEST['變數名稱'] 同時可接收來自 post、get 和 cookie 的變數 。
三、過濾外來變數
-
用內建的 htmlspecialchars() 函數來過濾。
-
直接用 htmlspecialchars($string) 的話,預設只轉化雙引號,不對單引號做轉義,所以,這樣用htmlspecialchars($string,ENT_QUOTES) 更好。
-
另一個和 htmlspecialchars 很像的 htmlentities 函數並不適用中文,因為會連同中文字一起轉義。
-
用 htmlentities 和 htmlspecialchars 只能防止XSS攻擊,不能防止SQL隱碼攻擊。
$img = htmlspecialchars($img, ENT_QUOTES);
-
改用PHP的 filter_var 過濾器亦有同樣效果:
$img = filter_var($img, FILTER_SANITIZE_SPECIAL_CHARS);