如何解决匹配的HTML定位符,显示与其href不同的URL
我们是网络钓鱼攻击的受害者,我们希望加强我们的Postfix垃圾邮件过滤器。
我们要检测在URL周围包含锚点(<a>
)但在href中定位到另一个URL的电子邮件正文。
以下是示例列表:
VALID
<a href="www.google.com">www.google.com</a>
<a href="www.google.com">google.com</a>
<a href="https://www.google.com" id="someId">google.com</a>
<a id="ID" href="https://google.com">google.com</a>
INVALID
<a href="www.malicIoUs.com">www.google.com</a>
<a href="www.malicIoUs.com">google.com</a>
<a href="www.malicIoUs.com" id="someId">google.com</a>
<a id="ID" href="https://google.evil.com">google.com</a>
https://regex101.com/r/kZUN84/1
我的计划是创建一个包含域+ TLD的命名捕获组(即“ https://www.google.com”的“ google.com”),然后检查定位标记中的文本是否与之匹配。如果没有,则可能是垃圾邮件。
正如您在regex101链接中看到的那样,我相信我必须使用捕获组和否定的前瞻性,但是我仍在努力编写它……(而且我知道 URL验证可能很棘手。 )
任何建议检查正则表达式是否匹配其子字符串之一?
解决方法
我可以提出这个问题,它与所有网络钓鱼类型匹配,而不是有效的。但是我认为这样容易产生误报:
-
<a id="ID" href="https://google.com">google</a>
-
<a id="ID" href="https://google.com">link here</a>
这是正则表达式:
<a\b\s*(?:.*)?(?=\bhref=)href="((?:https?:\/\/)?(?:www\.)?)?+(?'href'(?'start'[^"])[^"]+)"([^>]*)?>((?:https?:\/\/)?(?:www\.)?)?+(((?!\k'href')(?=\k'start'))|(?!\k'href'))([^<]+)(<\/a>)
我需要 start 命名组才能在第二个链接中获得可能的位置,因为从那里我可以检查整个 href 组。并且 href 中的第一个字符可能会丢失,因此这就是我放置|(?!\k'href')
的原因。
https://regex101.com/r/kZUN84/7(某些捕获组仅在regex101中用于着色)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。