xss.phpPHP過濾器擴展默認設置
<?php
header('Content-Type:text/html; charset=UTF-8');
var_dump(ini_get('filter.default'));
if (isset($_GET['name'])) {
echo $_GET['name'];
exit();
}
瀏覽http://localhost/xss.php?name=%3Cscript%3Ealert('XSS')%3C/script%3E
輸出:
串(10) 「unsafe_raw」
我下印象由於過濾器,這對於XSS漏洞是安全的擴展名,但它不是!它輸出一個JavaScript警報對話框。我的問題是:
- 爲什麼默認過濾器unsafe_raw。我讀過unsafe_raw不能防止XSS?
- 如何保護PHP免受此漏洞的侵害。我可以修改我的
php.ini
,但我希望在運行時執行此操作,但ini_set
,.htaccess
在我的Ubuntu盒子上默認不工作。我想讓它在運行時受到影響,以便所有的php實例(當部署在其他機器上)都是安全的。這是可能的,還是我真的需要撒上我的代碼filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
,以確保安全。
P.S:此代碼是安全的,也沒有看壞,但如果我可以將它設置在運行時,它會更好。
<?php
header('Content-Type:text/html; charset=UTF-8');
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
if (isset($_GET['name'])) {
echo $_GET['name'];
exit();
}
您應該從Rasmus => http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html閱讀此博客條目。他說他不會在代碼中使用它,但使用pecl擴展名,filter_raw_string是安全的!你不需要htmlspecialchars()了...... – Alfred 2011-01-26 21:37:28