簡體   English   中英

apache mod_rewrite http_user_agent出現特殊字符問題

[英]apache mod_rewrite http_user_agent with special character issues

我的網站出現垃圾郵件漫游器/抓取工具的問題,而請求卻在apache日志中顯示為:

"GET / HTTP/1.1" 200 7128 "-" "\x09Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"

這些請求中的奇怪區別是,由於某種原因,用戶代理之前帶有制表符( \\x09 ),因此我嘗試為這些代理創建.htaccess mod_rewrite過濾器。

到目前為止,我在創建適合於拒​​絕這些請求的RewriteCond方面一直沒有成功。 我嘗試了以下方法:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^\x09Mozilla [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(%0A|%0D|%27|%3C|%3E|%00|%09).* [NC]
RewriteRule ^.* - [F,L]

在第二個RewriteCond中, %09 (制表符)是最重要的執行子句(其他為提高安全性而拋出的子句)。

我的語法錯誤在哪里? 如何阻止這些請求?

好的,最終使用以下命令,似乎是在將機器人阻止在其軌道中,並顯示403錯誤:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Mozilla/5\.0.*Windows\ NT\ 5\.1;\ rv:5\.0.*Gecko/20100101\ Firefox/5\.0 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(%0A|%0D|%27|%3C|%3E|%00|%09|\t|\x09).* [NC]
RewriteRule ^.* - [F,L]

問題在於,當您鍵入\\ x09時,這不是一個特殊字符-它是字符\\,x,0和9。如果要使用制表符,請改用\\ t-這是制表符的正則表達式版本。 所以RewriteCond應該看起來像這樣:

RewriteCond %{HTTP_USER_AGENT} ^\tMozilla [NC,OR]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM