Sencha Extjs DateField 允许 javascript 注入问题

问题描述 投票:0回答:1

允许用户在 Extjs DateField 中注入 javascript。例如,如果您尝试使用 javascript 输入标签,请输入以下内容

`` 在 Extjs 站点上的日期字段文档中 https://docs.sencha.com/extjs/7.6.0/classic/Ext.form.field.Date.html 它会向您显示警报弹出窗口是一个截屏。它不应该运行 javascript,因为这被认为是代码注入。

ScreenShot

以前有人遇到过这个问题吗?

我试图调试弹出窗口的代码,但我找不到根调用者。

在此先感谢您的帮助

javascript extjs code-injection
1个回答
0
投票

此问题与工具提示处理有关。

这里特别执行代码,因为它被注入到 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、正则表达式属性——取决于所使用的单个组件。


我认为它与日期字段无关,因为如果您像这样配置数字字段,可以使用相同的值重现它:

{
        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)>'
});
© www.soinside.com 2019 - 2024. All rights reserved.