В плагине CellEditing от ExtJs, если мы добавим строку безопасности, он выполнится

В плагине CellEditing в ExtJs(ExtJs 3.1), если мы добавим строку безопасности как ><img src=0 onerror=alert(99)> в любой из ячеек, то он выполняется (будет показано предупреждение). Можем ли мы предотвратить это, используя любые beforeEdit или Validateedit или редактировать события?

2 ответа

Вам нужно заблокировать выполнение скрипта при вводе. Для этого вам нужно продезинфицировать то, что вводится в камеру. Это вы можете подтвердить редактирование события нажатия клавиши или изменить событие. Однако, если вы используете это в событии изменения, оно будет запущено даже во время начальной загрузки. Вы можете использовать регулярное выражение для поиска тега скрипта и, найдя его, либо предупредить пользователя, либо сбросить значение поля ввода.

Вы можете прикрепить renderer функция для каждого редактируемого столбца в сетке, который кодирует значение с Ext.htmlEncode, Это препятствует тому, чтобы введенный html был оценен и вместо этого отображен как текст.

Из функции Ext.htmlEncode в документах ExtJs:

Преобразуйте определенные символы (&, <,>, 'и ") в их эквиваленты символов HTML для литерального отображения на веб-страницах.

Следующий фрагмент отображает сетку на странице со столбцом имени для редактирования. Рендер htmlEncode значение и введенный HTML отображается в виде текста. Смотри работающую скрипку.

Ext.create('Ext.grid.Panel', {
    store: Ext.data.StoreManager.lookup('simpsonsStore'),
    columns: [
        {
            header: 'Name', 
            dataIndex: 'name', 
            editor: 'textfield',
            renderer: function (value, metaData) {
                return Ext.htmlEncode(value);
            }
        },
    plugins: {
        cellediting: {
            clicksToEdit: 1
        }
    },
    height: 200,
    width: 400,
    renderTo: Ext.getBody()
});
Другие вопросы по тегам