在以下情况下是否可以使用jQuery的.attr(attributeName,value)方法执行XSS攻击?

时间:2019-02-11 00:09:13

标签: jquery xss

给出以下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") = "\""

2 个答案:

答案 0 :(得分:0)

是的,此代码中有许多漏洞:

  1. 执行$('#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')

edit: jQuery通过逃避危险字符来保护您免受这2种攻击

  1. 在attibute值(标题)中注入恶意javascript
  2. 在属性值中
  3. 注入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为字符串 破坏我的网站时 您的页面看起来像this

有关如何针对XSS进行测试的更多详细信息,请点击此处:https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

答案 1 :(得分:0)

不,因为jQuery负责转义unsafe_string的内容,所以不可能突破属性值。通过jQuery的attr()函数将html或javascript代码写入属性值将转义该字符串,并且不会被解释为html或作为javascript代码执行。

可以通过查看$('#div001')[0].outerHTML来检查转义行为。