如何防止位于 Javascript HREF 属性的 XSS?
How to prevent against XSS located in Javascript HREF attribute?
<a href='javascript:do_something("<?php echo $untrusted_input; ?>");'>Test</a>
<script>
function do_something(str) {
//...
}
</script>
我想知道如何编码变量 $untrusted_input
(例如在 PHP 中)以避免执行 XSS(javascript 注入)?
在这种情况下,htmlspecialchars
函数是不安全的,因为它将注入的 "
替换为 "
,但 HTML 解析器仍会解释 [=16] =] 作为有效的 "
:
如果您尝试此代码,您将看到显示的警报:
<a href='javascript:do_something(""+alert("injected")+"");'>Test 4</a>
<script>
function do_something(str) {
//...
}
</script>
并且addslashes
函数也是不安全的,因为它在'
和"
之前添加了斜线但没有对"
进行编码,因此可以使用上面的例子。
请注意,我是作为一名网络安全研究人员提出这个问题的,我想知道我们可以轻松解决这个问题的方法?作为开发人员,我从来不这样做。
谢谢,
您可以使用 meta-tag 并将 content-security-policy 设置为禁止内联 javascript:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
有关详细信息,请参阅 CSP。
<a href='javascript:do_something("<?php echo $untrusted_input; ?>");'>Test</a>
<script>
function do_something(str) {
//...
}
</script>
我想知道如何编码变量 $untrusted_input
(例如在 PHP 中)以避免执行 XSS(javascript 注入)?
在这种情况下,htmlspecialchars
函数是不安全的,因为它将注入的 "
替换为 "
,但 HTML 解析器仍会解释 [=16] =] 作为有效的 "
:
如果您尝试此代码,您将看到显示的警报:
<a href='javascript:do_something(""+alert("injected")+"");'>Test 4</a>
<script>
function do_something(str) {
//...
}
</script>
并且addslashes
函数也是不安全的,因为它在'
和"
之前添加了斜线但没有对"
进行编码,因此可以使用上面的例子。
请注意,我是作为一名网络安全研究人员提出这个问题的,我想知道我们可以轻松解决这个问题的方法?作为开发人员,我从来不这样做。
谢谢,
您可以使用 meta-tag 并将 content-security-policy 设置为禁止内联 javascript:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
有关详细信息,请参阅 CSP。