给出的是以下html片段,它是在html文件中静态输入的:
<div id="div001" title="abc">Test</div>
当攻击者可以在以下上下文中为变量unsafe_string
提供任意值时,是否可以执行XSS攻击:
$('#div001').attr("title", unsafe_string);
我的问题是:是否有可能突破属性值,以便可以注入和执行某些恶意代码?攻击者只控制unsafe_string
,没有其他任何东西。
我可以举例来说
$('#div001').attr("title", '"');
结果是
$('#div001').attr("title") = "\""
不,因为jQuery负责转义unsafe_string
的内容,所以不可能突破属性值。通过jQuery的attr()函数将html或javascript代码写入属性值将转义字符串,不会被解释为html或作为javascript代码执行。
可以通过查看$('#div001')[0].outerHTML
来检查逃逸行为。
是的,此代码中存在许多漏洞:
$('#div001').attr("title", unsafe_string);
时执行恶意JavaScript示例:jsp代码:$('#div001').attr("title", ${unsafe_string});
当unsafe_string值为"");alert('do nasty stuff')
时
生成js代码:$('#div001').attr("title", "");alert('do nasty stuff')
编辑:jquery通过逃避危险的字符来保护你免受这两个
您必须转义不安全的字符串以防止所有这些(并且您还必须在将其保存在应用程序中时验证不安全的字符串)。我建议使用现有的安全库,具体取决于您的技术堆栈。在这里查看更多:https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
编辑:4。如果你将你的js代码保存在html文件中,你也可能容易受到html注入的影响示例:jsp代码:
<body>
<script>
$(document).ready(function(){$('#mydiv').attr( "title", ${unsafe_string})});
</script>
<div id="mydiv" title='abc'>
something
</div>
当unsafe_string是字符串</ script>破坏我的网站时你的页面看起来像
有关如何在这里测试XSS的更多细节:https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)