Sencha Extjs DateField允许JavaScript注入问题

rvpgvaaj  于 2023-04-30  发布在  Java
关注(0)|答案(1)|浏览(135)

允许用户在Extjs DateField中注入javascript。例如,如果您尝试使用javascript输入tag,请输入以下内容
〈img src=x onerror=alert(1)〉在Extjs网站https://docs.sencha.com/extjs/7.6.0/classic/Ext.form.field.Date.html的datefield文档中它会显示你警报弹出这里是一个屏幕截图。它不应该运行javascript,因为这被认为是代码注入。
ScreenShot
以前有人遇到过这个问题吗?
我试着调试弹出窗口的代码,但我无法找到根调用者。
先谢谢你的帮助

xam8gpfp

xam8gpfp1#

此问题与工具提示处理有关。
在这里,代码被执行,因为它被注入invalidText属性。
https://docs.sencha.com/extjs/7.6.0/classic/Ext.form.field.Date.html#cfg-invalidText
这是默认值:

"{0} is not a valid date - it must be in the format {1}"

您可以通过删除替换项或更改文本来避免此问题。此外,在处理之前检查输入。像DOMpurify这样的库可以帮助这里或者内置ExtJS功能,如maskRe,regex属性-取决于使用的单个组件。
我不认为它与datefield有关,因为如果你配置一个这样的numberfield,它可以用相同的值复制:

{
        xtype: 'numberfield',
        anchor: '100%',
        name: 'bottles',
        fieldLabel: 'Bottles of Beer',
        value: 99,
        maxValue: 99,
        minValue: 0,
        invalidText:"{0} invalid"
    }

它与验证和错误处理更相关,默认情况下将显示工具提示。此工具提示需要正确清理。
据我所知,这个问题已经存在多年了。
https://docs.sencha.com/extjs/7.6.0/classic/Ext.tip.ToolTip.html
另一个例子

Ext.getBody().appendChild({
    id: 'clearButton',
    html: 'Clear Button',
    style: 'display:inline-block;background:#A2C841;padding:7px;cursor:pointer;'
});

var tip = Ext.create('Ext.tip.ToolTip', {
    target: 'clearButton',
    html: '<img src=x onerror=alert(1)>'
});

相关问题