是否可以在以下上下文中使用 jQuery 的 .attr(attributeName, value) 方法执行 XSS 攻击?
Is it possible to perform a XSS attack using jQuery's .attr(attributeName, value) method in the following context?
给定以下 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") = "\""
是的,此代码中存在许多漏洞:
- 当你执行
$('#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 通过转义危险字符
保护您免受这 2 种攻击
在属性值(标题)中注入恶意javascript
在属性值html中注入
您必须对不安全的字符串进行转义以防止所有这些(并且在将不安全的字符串保存到您的应用程序中时,您还必须对其进行验证)。我建议为此使用现有的安全库,具体取决于您的技术堆栈。在这里查看更多:
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 是字符串时 破坏我的网站
您的页面看起来像
有关如何针对 XSS 进行测试的更多详细信息:https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
否,因为 jQuery 负责转义 unsafe_string
的内容,因此无法突破属性值。通过 jQuery 的 attr() 函数将 html 或 javascript 代码写入属性值将转义字符串,并且不会被解释为 html 或作为 [=18 执行=]代码。
可以通过查看 $('#div001')[0].outerHTML
来检查转义行为。
给定以下 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") = "\""
是的,此代码中存在许多漏洞:
- 当你执行
$('#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 通过转义危险字符
保护您免受这 2 种攻击在属性值(标题)中注入恶意javascript在属性值html中注入
您必须对不安全的字符串进行转义以防止所有这些(并且在将不安全的字符串保存到您的应用程序中时,您还必须对其进行验证)。我建议为此使用现有的安全库,具体取决于您的技术堆栈。在这里查看更多: 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 是字符串时 破坏我的网站
您的页面看起来像
有关如何针对 XSS 进行测试的更多详细信息:https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
否,因为 jQuery 负责转义 unsafe_string
的内容,因此无法突破属性值。通过 jQuery 的 attr() 函数将 html 或 javascript 代码写入属性值将转义字符串,并且不会被解释为 html 或作为 [=18 执行=]代码。
可以通过查看 $('#div001')[0].outerHTML
来检查转义行为。