【问题标题】:Path Parameter Regex [duplicate]路径参数正则表达式 [重复]
【发布时间】:2021-08-18 13:45:56
【问题描述】:

我一直在尝试为 Spring Boot for HttpSecurity 中的特定 API 路径定义一个角色。 我的路径基本如下:

/v3/files/{uuid}?subject=SHARED_WITH_LINK

uuid --> 不是静态的,类似于 ACC-1a433a56-d5cf-4185-b55e-7ac75d530b79

可能有额外的路径参数,如:

  1. /v3/files/{uuid}?subject=SHARED_WITH_LINK
  2. /v3/files/{uuid}?size=100&subject=SHARED_WITH_LINK
  3. /v3/files/{uuid}?subject=SHARED_WITH_LINK&sortBy=name&size=100

为了防止对 API 的未经授权的访问,我必须小心正则表达式。正则表达式中必须有 "/v3/files/""{uuid}" 部分可以包含 字母数字 字符和 '-' 字符。 路径的其余部分必须包含 "subject=SHARED_WITH_LINK"

我无法为这种路径格式构建正则表达式,这对我来说有点复杂,而且正如我所说,我担心未经授权的访问。

您能帮我构建正则表达式吗?

例如,我创建了以下正则表达式(不涵盖上述所有要求):

^/v3/files/[\w\-]*(\?)?$

【问题讨论】:

    标签: regex spring spring-boot security spring-security


    【解决方案1】:

    你可以使用类似下面的东西:

    ^/v3/files/[A-Za-z0-9\-]+\?(?:\w+=\w+&)*subject=SHARED_WITH_LINK(?:&\w+=\w+)*$
    

    Demo

    注意事项:

    • 使用 [A-Za-z0-9\-] 而不是 [\w-] 来限制更多(即,拒绝下划线和 Unicode* 字母数字)。

      • 对 UUID 字符使用 + 量词而不是 * 以避免匹配零长度 UUID。您可能想要使用更高的最小长度(即{n,}),或者如果您的UUID 格式始终相同(很可能是这种情况),您应该更加明确,并且只使用ACC-[a-z0-9]{8}-(?:[a-z0-9]{4}-){3}[a-z0-9]{12} 来匹配该特定格式。
    • 使用\w+=\w+ 匹配单个参数。您可能希望将 \w 替换为包含您希望参数名称/值支持的任何字符的字符类。

    • 即使连字符在字符类末尾时不需要转义,但我更喜欢明确转义它,尤其是在考虑安全性时。这可确保在追加更多字符时模式不会中断(或更糟的是,接受不需要的字符)。


    *Unicode 支持可能默认禁用,但为了安全起见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 2022-11-22
      • 1970-01-01
      • 2020-09-30
      • 2014-05-09
      • 2013-02-12
      相关资源
      最近更新 更多