1

クライアントのブログに挿入された大量のスパムを一掃しようとしています。問題の 1 つは、最初にインジェクションを行ったハックが、実際には不正な形式の複数埋め込みリンクを作成する方法でインジェクションを行ったため、それらを簡潔に把握するのに苦労していることです。

私が考えたのは、投稿テーブル内のすべてのリンクをテキスト ファイルにダンプし、そのリストから有効なものを削除し、そこから悪意のあるリンクを一度に 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

インサイドアウトのアプローチが最善の策だと思います。要素内に他のタグがないと仮定すると、 to<a>を変更するのと同じくらい簡単なはずです。そして、あなたが言ったように、複数のパスを作成します。.*?[^<>]*

多くの正規表現フレーバーでは、ネストされた構造全体を 1 回のパスで一致させることができますが、フレーバーごとに異なる方法で実行され、常に見苦しくなります。

于 2011-09-15T03:00:37.433 に答える