微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

匹配的HTML定位符,显示与其href不同的URL

如何解决匹配的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 举报,一经查实,本站将立刻删除。