javascript - 如何防止位于 Javascript HREF 属性中的 XSS?
问题描述
<a href='javascript:do_something("<?php echo $untrusted_input; ?>");'>Test</a>
<script>
function do_something(str) {
//...
}
</script>
我想知道如何对变量进行编码$untrusted_input
(例如在 PHP 中)以避免执行 XSS(javascript 注入)?
在这种情况下,该htmlspecialchars
函数是不安全的,因为它替换了注入"
的"
,但 HTML 解析器仍会将 解释"
为有效的"
:
如果您尝试此代码,您将看到显示警报:
<a href='javascript:do_something(""+alert("injected")+"");'>Test 4</a>
<script>
function do_something(str) {
//...
}
</script>
并且该addslashes
函数也是不安全的,因为它在之前添加了斜杠'
并且"
不进行编码"
,因此可以使用上面的示例进行转义。
请注意,我是作为网络安全研究人员提出这个问题的,我想知道我们可以轻松解决这个问题的方法吗?作为开发人员,我从不这样做。
谢谢,
解决方案
您可以使用元标记并将您的 content-security-policy 设置为禁止内联 javascript:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
有关详细信息,请参阅CSP。
推荐阅读
- android - 如何修复在华为和三星设备中加载 GPS 位置
- android - 通过修改将视图转换为位图
- html - 添加必需属性后,选择框验证出现问题
- c - 编译一个简单的 C lua5.0 程序,未定义的引用
- python - 为什么继承另一个类的类不会产生与“另一个类”相同的结果?
- neo4j - neo4j中的pattern和shape有什么区别
- javascript - 在 JavaScript 中深度嵌套对象中获取对象的完整路径
- json - 转发器字段上 .csv 导入/导出的 Octobercms 问题
- ios - 上传到 App Store 的要求 - 商业应用
- css - 画廊高度标尺