path参数regex

sy5wg1nm  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(433)

此问题已在此处找到答案

如何将spring security antmatchers模式仅应用于带有pathvariable的url(3个答案)
上个月关门了。
我一直试图在spring boot for httpsecurity中为特定api路径定义一个角色。我的路径基本上如下所示:
/v3/files/{uuid}?subject=与链接共享
uuid-->不是静态的,类似于acc-1a433a56-d5cf-4185-b55e-7ac75d530b79
可能有额外的路径参数,如:
/v3/files/{uuid}?subject=与链接共享
/v3/files/{uuid}?size=100&subject=shared_与_链接
/v3/files/{uuid}?subject=shared_与_link&sortby=name&size=100
为了防止未经授权访问api,我必须小心使用regex。正则表达式中必须正好有“/v3/files/”。“{uuid}”部分可以包含字母数字字符和“-”字符。路径的其余部分必须包含“subject=shared\u with\u link”
我无法为这种路径格式构建正则表达式,它对我来说有点复杂,正如我所说,我担心未经授权的访问。
你能帮我建立正则表达式吗?
例如,我创建了以下正则表达式(不包括上述所有要求):

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

s4n0splo1#

您可以使用以下内容:

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

演示。
笔记:
使用 [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支持,但只是为了安全起见。

相关问题