Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
textfield中的extjs4和XSS_Extjs_Xss - Fatal编程技术网

textfield中的extjs4和XSS

textfield中的extjs4和XSS,extjs,xss,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/javas

我在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>
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');
});

testExtXSS.js如下所示:

<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>
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');
});
Ext.onReady(函数(){
var formPanel=Ext.create('Ext.form.Panel'{
框架:对,
标题:“表单字段”,
宽度:340,
车身衬垫:5,
字段默认值:{
labelAlign:'左',
标签宽度:90,
主持人:“100%”
},
项目:[
{
xtype:'textfield',
名称:“textfield1”,
fieldLabel:“警报(document.cookie)文本字段”,
值:“警报(document.cookie)文本字段”
}
]
});
formPanel.render('myDiv');
});
我希望fieldLabel中的脚本标记能够执行,但事实并非如此。当我使用Firebug和Chrome开发者工具查看HTML元素时,我可以在HTML树中看到脚本元素

有人能解释一下ExtJS是如何将其插入DOM的,以及为什么不执行它吗

谢谢并致以最良好的祝愿,
Ronald

这是因为ext模板是使用innerHTML注入的,这是最快的方法,但有一个缺点,即脚本无法执行

但您可以对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);
        }
    }
}
...
。。。
{
xtype:'textfield',
名称:“textfield1”,
fieldLabel:“警报(1)文本字段”,
值:“some val”,
听众:{
渲染:函数(cmp){
cmp.getEl().update(cmp.getEl().dom.innerHTML,true);
}
}
}
...
截图:
(对不起我的英语)

非常感谢弗拉德!我已经用Sencha Fiddle测试了这个片段,脚本正在执行(与您所说的相反)。你介意澄清你的问题吗?