文本字段中的ExtJS 4和XSS

时间:2013-08-13 07:14:15

标签: extjs xss

我对ExtJS4中的XSS攻击进行了一些测试。我的HTML页面如下所示:

<html>
  <head>
    <link rel="stylesheet" type="text/css" href="ext-all.css"/>   
    <script type="text/javascript"  src="ext-all-dev.js"></script>
    <script type="text/javascript"  src="testExtXSS.js"></script>
  </head>
  <body>
    <div id="myDiv"></div>
  </body>
</html>

和testExtXSS.js如下所示:

Ext.onReady(function() {
    var formPanel = Ext.create('Ext.form.Panel', {
        frame: true,
        title: 'Form Fields',
        width: 340,
        bodyPadding: 5,

        fieldDefaults: {
            labelAlign: 'left',
            labelWidth: 90,
            anchor: '100%'
        },
        items: [
        {
            xtype: 'textfield',
            name: 'textfield1',
            fieldLabel: '<script>alert(document.cookie)</script>Text field',
            value: '<script>alert(document.cookie)</script>Text field'
        }
        ]
    });
    formPanel.render('myDiv');
});

我希望fieldLabel中的脚本标记能够被执行,但事实并非如此。当我使用Firebug和Chrome开发者工具查看HTML元素时,我可以在HTML树中看到脚本元素。

任何人都可以向我解释ExtJS如何将其插入到DOM中以及为什么不执行它。

谢谢和最诚挚的问候, 罗纳德

1 个答案:

答案 0 :(得分:1)

这是因为使用innerHTML注入了ext模板,这是最快的方法,但是缺点是脚本没有被执行。

但是你可以对Ext.dom.Element使用update()方法:

...
{
    xtype: 'textfield',
    name: 'textfield1',
    fieldLabel: '<script>alert(1)</script>Text field',
    value: 'some val',
    listeners: {
        render: function(cmp) {
            cmp.getEl().update(cmp.getEl().dom.innerHTML, true);
        }
    }
}
...

屏幕截图:http://my.jetscreenshot.com/6795/20130813-pdeh-28kb (对不起我的英文)