确保 RegExp 对象在 ECMAScript 中定义[关闭]

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

我想用 JS(不是 Typescript)写一个简单的国际化脚本,但我发现自己陷入了晦涩的深处。

这个问题对我的实现来说并不紧迫——我以它为例。这个问题更笼统,可以根据需要花费很长时间。我不一定想要快速回答,就像问题可能不清楚一样。

让我们从简单开始,我有一个 DOM 元素,里面有文本,我想用接收到的字符串替换它:

document.getElementById('anID').textContent = aStringVar;

简单的操作,你会同意的。在这里,它让我可以防止大部分XSS 风险。没问题,它完成了它的工作,正确替换了文本,避免了元素注入的风险。

我需要建立一个最小的 JS 检查来验证字符串的内容是否符合我脚本中的预期。在我的例子中,我想通过

RegExp
对 HTML 保留字符和实体进行验证。所以我首先尝试写以下内容:

RegExp("[&<>\"'/]", "g")[Symbol.match](aStringVar).length === 0

在我看来,这是一种非常规的方式来实现简单的匹配。我使用 Symbol.match,专门调用 RegExp.match。这样,我试图确保脚本使用 ECMAScript 定义的RegExp。但这实际上是不可能的,这种语法是正确的并且有效,但我不能确保 Regexp 是按照标准定义的。而且不知是否真的需要检查

RegExp
对象的完整性,反正我也不敢保证。但是在任何时候脚本都不应该继承不需要的第三方行为,因为在这个类上这可能完全适得其反。

随着模块的大量使用和捆绑包的“几乎义务”进行优化,在我看来,我们很快就会迷失在一组已定义的对象和执行上下文中。 Personnaly,我不知道我使用的每个依赖项的完整代码,在每个版本中——即使我依靠评论来避免最大的问题。

有点荒谬,因为我不能确保脚本在没有超载的上下文中使用

RegExp
。然而,它对我的脚本来说是一个重要的对象。在 XSS 的情况下,没有办法防止使用语言本身的语法滥用脚本。所以它会归结为我的脚本文档中的简单条款,并且完全依赖许可证来确保对源代码的任何更改都得到了正确的注释。这不是一种可行的安全方法,因为我们不能依赖攻击者以任何方式强制执行许可证。

MDN 文档中,我看到 DOMPurify 可用于 HTML 清理,对我的情况很有用。好消息是我可以依靠它并且技术上已经为我检查这种依赖性所做的一切都已经完成。不那么令人兴奋的是——我可能想确保这个库和新版本的所有代码都是清晰的,它就像系统中的任何其他依赖项一样是一个依赖项。 javascript 本身功能的完整性可以通过在我的脚本中“按原样”使用此外部依赖项来保护。但在我看来,当这不能防止意外行为时,这似乎是一个不合适的备份解决方案。但是,这可以通过我的脚本中的特定断言来防止,只需使用传统的 javascript 对象,如

Regexp
.

这让我想到了以下问题,看起来很奇怪:

  • 是否可以在不检查自身完整性的情况下使用 RegExp?
javascript html security xss
© www.soinside.com 2019 - 2024. All rights reserved.