2013-08-13 3 views
0

Я сделал небольшой тест относительно атак XSS в ExtJS4. Мой HTML страница выглядит следующим образом:ExtJS 4 и XSS в текстовом поле

<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, которая будет выполнена, но это не было. Когда я просматривал элементы HTML с помощью Firebug и инструментов для разработчиков Chrome, я мог видеть элемент сценария в дереве HTML.

Может ли кто-нибудь объяснить мне, как ExtJS вставляет это в DOM и почему он не выполняется.

Спасибо и наилучшие пожелания, Ronald

+0

Я проверил сниппет в Сенча Fiddle [ как показано здесь] (https://fiddle.sencha.com/#fiddle/fgh), и скрипт выполняется (напротив того, что вы сказали). Не возражаете прояснить свой вопрос? –

ответ

1

Это происходит потому, что шаблон внутра вводится с помощью innerHTML, который является самым быстрым подходом, но поставляется с недостатком, что скрипты не получают запуск.

Но вы можете просто использовать обновление() метод для Ext.dom.Element:

... 
{ 
    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 (Извините за мой английский)

+0

Спасибо большое Влад! – Ronald

Смежные вопросы