1

我正在尝试清除大量注入客户博客的垃圾邮件。其中一个问题是,最初进行注入的黑客这样做的方式实际上是以格式错误的多嵌入链接结束的,所以我很难以简洁的方式抓住它们。

我的想法是将帖子表中的所有链接转储到一个文本文件中,然后从该列表中删除有效链接,然后从那里创建一个 bash 脚本,一次删除一行恶意链接。我试图使用非贪婪的 grep 来转储链接,否则如果帖子中有多个链接,它将从第一个链接的开头到最后一个链接的结尾。这是我使用的行:

grep -Po "<a href=[\'\"][^\'\"]*[\'\"]>.*?</a>" wp_posts.sql>full-link-list.txt

当它试图解析嵌入在其他链接中的链接时,就会出现问题。例如,我得到这个:

<a href="http://blogtorn.com/images/">where <a href="http://clinesite.com/images/">buy n viagra </a>

从这样的部分:

<a href="http://blogtorn.com/images/">where <a href="http://clinesite.com/images/">buy n viagra </a>  do you buy viagra | buy cialis phentermine | cheap levitra online</a>

不过,并非所有链接都像这样被破坏,如果我清除上面命令的输出,我认为这将使追踪碎片变得非常困难。我认为我需要的是抓住整个街区的东西(即,将开口<a href与相同数量的关闭匹配</a>),或者只是可能的最小内部匹配(即从内到外的贪婪),然后我多次通过,但我也愿意接受其他建议。对此有什么想法吗?谢谢!

4

1 回答 1

2

我认为由内而外的方法是你最好的选择。假设元素内没有其他标签<a>,它应该像更改.*?to一样简单[^<>]*。而且,正如你所说,进行多次传球。

虽然在许多正则表达式风格中可以一次匹配整个嵌套结构,但每种风格的做法都不同,而且总是很丑陋。

于 2011-09-15T03:00:37.433 回答