我使用echo $_SERVER['REQUEST_URI'];
将HTML表单的部分输出给用户。
我担心跨站点脚本攻击的可能性,其中可以将指向异地JavaScript文件的链接注入页面。但是,我无法过滤" ="在我的输出中,因为它是我的查询字符串的相关部分。可能过滤等于符号输出就足以防止CSS攻击?或者只是一种不好的做法(在表单中使用用户生成的GET查询字符串)?
这是潜在的漏洞:
//Attacker types this into the browser:
vulnerabilesite.com/=query=?querystringhere/?<script type="text/javascript">
maliciouswebsite.com/js.js</script>
//People viewing the website using that link will now execute the following code:
<script type="text/javascript"> /link-to-malicious-javascript </script>
答案 0 :(得分:1)
使用以下htmlspecialchars
调用安全地转义$_SERVER['REQUEST_URI']
内容和属性,即使您对HTML属性使用单引号也是如此。如果使用UTF-8以外的编码,请确保替换正确的编码。
echo htmlspecialchars( $_SERVER['REQUEST_URI'], ENT_QUOTES, 'UTF-8' );
这与CodeIgniter框架中html_escape
函数使用的代码相同。
可替换地:
echo htmlspecialchars( $_SERVER['REQUEST_URI'], ENT_QUOTES | ENT_HTML5, 'UTF-8' );