【问题标题】:Jslint improvements | Character set for urlJslint 改进 | url 的字符集
【发布时间】:2012-08-24 23:08:28
【问题描述】:

对于这个原型 url 检查器。请注意,我现在要做的就是检查长度。

url:            /:\/\/(www\.)?.{1,200}\..{1,1800}/,

Jslint.com 报错

Insecure '.'

我在这个 SO post. 上的这个否定字符集也有类似的错误

鉴于这种背景,我认为很明显 jslint 不喜欢允许全部或几乎全部作为测试模式。

所以,我只需要更换 .域和域之后的部分具有有效的字符集。

对于我可以简化为的域

[a-zA-Z0-9\-]

域之后的部分的字符集是什么...即在 foo.com/ 之后

所以有

//

紧随其后

www.(optional)

紧随其后

foo.boo.moo.(note it matched up until the last .) ( this character set is listed above)

紧随其后

X

如何将所有 X 组合在一起:

http://www.foo.X

我不关心提取端口或查询信息,我只需要域之后所有内容的字符集,以使正则表达式根据 jslint “安全”。

注意,我只是在尝试逐步改进。

JavaScript, The Good Parts 在正则表达式章节中有一个很好的 URL 检查器,但不是我现在需要的。

【问题讨论】:

标签: javascript regex


【解决方案1】:

您要查找的正则表达式详细信息可以在this answer on StackOverflowRFC 3986 中找到

“主机”的具体字符和表达式为:[a-z0-9\-._~%]+

您可能要记住,有效的 URL 可以是 IP 地址(IPv4、IPv6 和 IPvFuture)的形式,请查看链接的 RegEx 了解详细信息。

【讨论】:

    【解决方案2】:

    您无需更改正则表达式。

    如果问题只是 JSLint 抱怨它,您可以禁用该选项。

    要在 jslint.com 上测试它,请在 选项 部分查看:

    [default]  . and [^...] in /RegExp/
    

    并单击它以将其设置为[true]

    那么 JSLint 就会接受你的正则表达式。

    或者,您可以使用特殊注释来禁用检查。如果您将此测试代码粘贴到 JSLint 中,它将接受它,而无需手动更改选项设置:

    /*jslint regexp: true */
    var test = /:\/\/(www\.)?.{1,200}\..{1,1800}/;
    

    这是此选项的documentation

    容忍.[^...]。在/正则表达式/

    true if .[^...] 应该在正则表达式中被允许。它们匹配的材料比预期的要多,从而使攻击者能够混淆应用程序。在安全应用程序中进行验证时,不应使用这些表单。

    您在正则表达式中使用. 的方式似乎不太可能存在任何“不安全”,因此我将继续覆盖 JSLint 设置。

    (我现在看到这是一个非常古老的问题,但也许这个答案对其他人有用。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 2018-06-21
      相关资源
      最近更新 更多