例如,如果我在表单中选择 [URL值] ,将 [URL值] 保存在数据库中,然后在页面中使用它这样:
<a href="[URL value]" > The Link </a>
如何防止此[URL值]:
http://www.somelink.com"> Evil text or can be empty </a> ALL THE EVIL HTML I WANT <a href="
我如何防止这种针对URL表单文件的HTML注入,而不会破坏URL,以防它有效?
答案 0 :(得分:6)
在表单上收到网址时:
filter_var(url, FILTER_VALIDATE_URL)
确保网址格式有效。http://
或https://
开头(或至少拒绝所有javascript:
网址,因为它们可能包含恶意代码)
显示页面时:
htmlspecialchars()
转义您在HTML中插入的网址(以及所有其他文字)。答案 1 :(得分:1)
最简单的方法是检查输入是否包含看起来像语法有效的URL,没有像&gt;这样的字符。这是URL中不允许的。最简单的方法是使用filter extension。执行此操作的代码如下:
if (filter_var($url, FILTER_VALIDATE_URL)) {
//Valid URL submitted
} else {
//Invalid URL submitted
}
答案 2 :(得分:0)
编辑:只使用urlencode,不要使用htmlentities
每当您将数据放入URL的键/值对时,您应该使用urlencode()对该数据进行编码。此函数将处理任何特殊字符,这些字符在URL的构造方式中具有语法含义。符号,等号和问号将为您编码。注入HTML中的所有尖括号和新行字符也将被编码!
<?php $TheVariable = $_REQUEST['suspect_var']; // Untrusted data ?>
<a href="http://www.mysite.com/script.php?untrusted_data=<?php echo urlencode($TheVariable) ?>">The Link</a>
答案 3 :(得分:0)
用于在显示使用htmlentities($ var,ENT_QUOTES)或htmlspecialchars($ var,ENT_QUOTES)时转义。由于浏览器特定的XSS有效负载,它需要转义单引号和双引号。点击此处 - http://ha.ckers.org/xss2.html
另外,在验证URL javascript时:URI不是唯一危险的。另一个是数据:URI。
无论如何,排除除白名单之外的所有内容总是更安全,然后包括除黑名单之外的所有内容。
答案 4 :(得分:-1)
在打印网址时,使用urlencode
仅对"
符号进行编码,例如:
echo '<a href="'.str_replace('"', urlencode('"'), $url).'">link name</a>';