RegEx-HTML中的网络钓鱼尝试

时间:2019-09-14 15:08:15

标签: regex url href pcre

我需要您的帮助:(
我要什么:
如果 url.text url.href 都包含不相等的URL(没有协议和子域),则匹配字符串。

它应该像这样工作:

<a href="http://www.test1.net/dir1/index.html" target="_blank">test1.net/admin</a> <-- NOT MATCH
<a href="https://test2.com">THIS SITE</a> <-- NOT MATCH
<a href="https://subdomain.test3.org">test2.org</a> <-- MATCH
<a href="http://www2.test4.com" target="_blank">https://global.test4.com/index.html</a> <-- NOT MATCH
<a href="http://eu.test5.com">https://evil.com/eu.test5.com/</a> <-- MATCH
<a href="http://eu.site6.com/index.html" target="_blank">https: // eu. evil. com</a> <-- MATCH
<a href="https://site7.com/">http://www.site7.com/123/test</a> <-- NOT MATCH

我开始写类似this的东西,但是我的代码在执行相反的操作时遇到了问题。
帮我弄清楚如何做我想要的东西。

1 个答案:

答案 0 :(得分:0)

您的原始表达式经过精心设计,但我会使用一些语句,例如:

(?!.*\1.*)

或:

(?!((?:https?:\/\/)?(?:w{3}\.)?(?:[^"\/]*\.)?(\1)).*)

内部,以绕过url.text中的相同域,也许使用类似以下表达式:

(?i)<a\s+href="(?:https?:\/\/)?(?:w{3}\.)?(?:[^"\/]*\.)?([a-z0-9_-]+\.[a-z0-9_-]{2,6})(\/[^"]*)?"[^>]*>(?!.*\1.*)(?:https?:\/\/)?(?:w{3}\.)?(?:[^"\/]*\.)?([a-z0-9_-]+\.[a-z0-9_-]{2,6})(\/[^"]*)?.*?<\/a>

或更准确地说是:

(?i)<a\s+href="(?:https?:\/\/)?(?:w{3}\.)?(?:[^"\/]*\.)?([a-z0-9_-]+\.[a-z0-9_-]{2,6})(\/[^"]*)?"[^>]*>(?!((?:https?:\/\/)?(?:w{3}\.)?(?:[^"\/]*\.)?(\1)).*)(?:https?:\s*\/\/\s*)?(?:\s*w{3}\.\s*)?(?:[^"\/]*\.\s*)?([a-z0-9_-]+\s*\.\s*[a-z0-9_-]{2,6}\s*)(\/[^"]*)?.*?<\/a>

您最有可能想要修改并更改边界的内容。例如,您可以在要允许一些空格的任何位置添加\s*,或者可以使用双界量词\s{0,5}

Demo


如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。