今天早些时候,有人询问有关网络应用中输入验证策略的问题.
在撰写本文时,最重要的答案建议PHP只使用htmlspecialchars和mysql_real_escape_string.
我的问题是:这总是足够的吗?还有更多我们应该知道的吗?这些功能在哪里崩溃?
如果我正在清理我的数据库插入,并且还要转义我用的HTML写入htmlentities($text, ENT_COMPAT, 'UTF-8')- 是否有任何意义也要用xss_clean过滤输入?它还带来了哪些其他好处?
我一直在使用Security Compass 的免费Firefox扩展XSS Me来测试XSS问题.但是,使用我所理解的安全过滤,XSS仍然会报告警告.这些准确的警告还是虚假的?
使用下面的代码作为测试用例:
<form method="post" action="">
<input type="text" name="param" value="<?php echo htmlentities($_POST['param'])?>">
<input type="submit">
</form>
<?php echo htmlentities($_POST['param'])?>
Run Code Online (Sandbox Code Playgroud)
我手动运行一些恶意软件,但没有一个在浏览器中执行,使用Charles调试代理我可以看到响应按预期编码.
但是,XSS Me会报告许多警告,就像它可以在HTML源代码中看到未编码的字符串一样: alt text http://img696.imageshack.us/img696/8850/xss.png
同时看着查尔斯,我可以看到字符串是编码的,应该是安全的,例如 <IMG SRC="jav ascript:document.vulnerable=true;">