voi*_*oid 2 javascript php xss
<a href='javascript:do_something("<?php echo $untrusted_input; ?>");'>Test</a>
<script>
function do_something(str) {
//...
}
</script>
Run Code Online (Sandbox Code Playgroud)
我想知道如何对变量进行编码$untrusted_input(例如在 PHP 中)以避免执行 XSS(javascript 注入)?
在这种情况下,该htmlspecialchars函数是不安全的,因为它替换了注入"的",但 HTML 解析器仍会将 解释"为有效的":
如果您尝试此代码,您将看到显示警报:
<a href='javascript:do_something(""+alert("injected")+"");'>Test 4</a>
<script>
function do_something(str) {
//...
}
</script>
Run Code Online (Sandbox Code Playgroud)
而且这个addslashes函数也是不安全的,因为它在前面'加了斜杠,"但不编码",所以可以使用上面的例子进行转义。
请注意,我是作为一名网络安全研究人员问这个问题的,我想知道我们可以轻松解决这个问题的方法吗?作为开发人员,我从不这样做。
谢谢,
您可以使用元标记并将您的内容安全策略设置为禁止内联 javascript:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅CSP。