正则表达式保护(绕过XSS或打开重定向) - Javascript

时间:2022-12-05 13:58:49

Anyone in the universe can help me finding out the function.What will be done with this regex string

宇宙中的任何人都可以帮我找到这个函数。这个正则表达式字符串将会做什么

/^#~?!(?:\/?[\w\.-])+\/?(?:\?|$)/

When it passed to this javascript statement like this.

当它传递给这样的javascript语句。

(/^#~?!(?:\/?[\w\.-])+\/?(?:\?|$)/).test(location.hash)&&location.replace(location.hash.substr(location.hash.indexOf('!')+1));

And is it possible to bypass this regex string may be making an xss attack or an open redirect?

是否有可能绕过这个正则表达式字符串可能正在进行xss攻击或开放重定向?

EDIT :-

编辑: -

Ok iam going more accurate. My goal is to break the above Regex Match to make an xss or open redirect.(Only for education purpose,like a CrackMe).

好的,我更准确。我的目标是打破上面的正则表达式匹配以制作xss或打开重定向。(仅用于教育目的,如CrackMe)。

So For Eg:- If i used #!*.com then the browser redirects to current domain plus *.com Like

所以对于Eg: - 如果我使用#!*.com然后浏览器重定向到当前域加上*.com就像

domain.com/foo/#!*.com

domain.com/foo/#!*.com

it redirects to domain.com/*.com.

它重定向到domain.com/*.com。

So i tried putting like this #!//*.com but the regex match fails.

所以我尝试像这样#!// *.com,但正则表达式匹配失败。

Is there anyway to bypass it to make an open redirect to *.com(Any kinda character encodings or anything else).

反正有没有绕过它来打开重定向到*.com(任何有点字符编码或其他任何东西)。

If else is it possible to make an XSS in this current context.

如果可以在当前上下文中创建XSS。

Thank you.

谢谢。

1 个解决方案

#1


2  

it must :

它必须 :

  • start with # (a hash in a url)
  • 以#开头(url中的哈希)
  • then maybe a "~" (one or zero)
  • 然后可能是一个“〜”(一个或零)
  • then "!"
  • 然后 ”!”
  • then one ore more letters (\w ) or dots (.) or dash (-)
  • 那么一个或多个字母(\ w)或点(。)或破折号( - )
  • then maybe a "slash" (one or zero)
  • 然后可能是“斜线”(一个或零)
  • then a "?" or then end of the string
  • 那么一个“?”或者然后结束字符串

This means it matches url like

这意味着它匹配url

http://yourdomain/foo/#!bar?etc

and replace the current url with

并用。替换当前的URL

http://yourdomain/foo/bar?etc 

to try to access directly the file "bar" if it exists

尝试直接访问文件“bar”(如果存在)

The risk is if your site is in ajax, and you make somewhere a direct and blind include() of what is in the hash.

风险在于,如果您的站点位于ajax中,并且您在某个地方直接使用了哈希中的包含()。

#1


2  

it must :

它必须 :

  • start with # (a hash in a url)
  • 以#开头(url中的哈希)
  • then maybe a "~" (one or zero)
  • 然后可能是一个“〜”(一个或零)
  • then "!"
  • 然后 ”!”
  • then one ore more letters (\w ) or dots (.) or dash (-)
  • 那么一个或多个字母(\ w)或点(。)或破折号( - )
  • then maybe a "slash" (one or zero)
  • 然后可能是“斜线”(一个或零)
  • then a "?" or then end of the string
  • 那么一个“?”或者然后结束字符串

This means it matches url like

这意味着它匹配url

http://yourdomain/foo/#!bar?etc

and replace the current url with

并用。替换当前的URL

http://yourdomain/foo/bar?etc 

to try to access directly the file "bar" if it exists

尝试直接访问文件“bar”(如果存在)

The risk is if your site is in ajax, and you make somewhere a direct and blind include() of what is in the hash.

风险在于,如果您的站点位于ajax中,并且您在某个地方直接使用了哈希中的包含()。