Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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
Javascript ExtJS 7.1标记字段正在执行XSS标记_Javascript_Extjs_Tagfield - Fatal编程技术网

Javascript ExtJS 7.1标记字段正在执行XSS标记

Javascript ExtJS 7.1标记字段正在执行XSS标记,javascript,extjs,tagfield,Javascript,Extjs,Tagfield,我在输入时遇到了关于标记字段组件的问题。输入整个值后,将执行此标记。我已尝试阻止在keyup、keypress、keydown和beforequery事件上执行标记,但它仍在执行。这段代码阻止事件在检测到XSS标记时执行 Ext.application({ name: 'Fiddle', launch: function () { var shows = Ext.create('Ext.data.Store', { fields

我在输入时遇到了关于标记字段组件的问题。输入整个值后,将执行此标记。我已尝试阻止在keyup、keypress、keydown和beforequery事件上执行标记,但它仍在执行。这段代码阻止事件在检测到XSS标记时执行

    Ext.application({
    name: 'Fiddle',

    launch: function () {

        var shows = Ext.create('Ext.data.Store', {
            fields: ['id', 'show'],
            data: []
        });

        Ext.create('Ext.form.Panel', {
            renderTo: Ext.getBody(),
            title: 'Sci-Fi Television',
            height: 200,
            width: 500,
            items: [{
                xtype: 'tagfield',
                itemId: 'tagField',
                fieldLabel: 'Select a Show',
                store: shows,
                displayField: 'show',
                valueField: 'id',
                queryMode: 'local',
                filterPickList: false,
                listeners: {
                    beforequery: function () {
                        var editor = Ext.ComponentQuery.query('#tagField')[0];
                        if (editor.inputEl.getValue().search(new RegExp('(<([^>]+)>)')) >= 0) {
                            editor.inputEl.dom.value = '';
                            return false;
                        }
                    },
                    keypress: function (textfield, event) {
                        var editor = Ext.ComponentQuery.query('#tagField')[0];
                        if (editor.inputEl.getValue().search(new RegExp('(<([^>]+)>)')) >= 0) {
                            editor.inputEl.dom.value = '';
                            return false;
                        }
                    },
                    keydown: function (textfield, event) {
                        var editor = Ext.ComponentQuery.query('#tagField')[0];
                        if (editor.inputEl.getValue().search(new RegExp('(<([^>]+)>)')) >= 0) {
                            editor.inputEl.dom.value = '';
                            return false;
                        }
                    },
                }
            }]
        });

    }
});

这花了一点时间来寻找,但显然在Ext.form.field.ComboBox中,有一个onfieldVariation处理程序,它确实是所有这些的关键。看一看处理这个问题的代码。。。我相信这就是你想要的:

Ext.define('ComboOverride', {
  override: 'Ext.form.field.ComboBox',

  onFieldMutation: function (e) {
    var inputDom = this.inputEl.dom;
    if (Ext.String.hasHtmlCharacters(inputDom.value)) {
      inputDom.value = '';
      alert('XSS Detected, Removing');
    }
    return this.callParent(arguments);
  }
});

你想阻止xss的注射吗?你能用这把小提琴来表示你想做什么吗@mcg1103是的,我正试图阻止xss注射。我已经更新了我尝试过的代码片段。我目前还试图创建一个正则表达式来忽略输入上的html标记。你有一个xss注入的例子可以作为测试吗?@mcg1103这是我试图使用的xss标记。我也在使用extjs的7.1版本。对不起,我错过了原来的帖子。在你发帖子之前,我对这种攻击一无所知,但很高兴知道!你使用的是经典工具包,对吗?很酷,我认为这个答案非常有用。如果我能用这个,我会试试的。实际上,我通过检测输入值has大于、小于、onerror或src找到了解决方法。它实际上是一种特殊情况,即只有此标记正在执行,而其他标记在接受值后可以在显示器上编码。无论如何,这个答案很有帮助@砧木