2016年2月26日 星期五

被瀏覽器攻擊的可能原因

還沒升級 https 之前,偶而會有少數 ip 持續的 request 同一個頁面,可能原因很多,可能是
  • adsense 造成:在某些地區的 adsense ,會再用 iframe 包一次原網頁。所以在 log 看到的就是 自己的網頁 iframe 自己的網頁(也有透過 js 驗證這個假設),然後使用者端就一直打打打。解決方法是加上 x-frame-options: deny 。
  • 爬蟲設計不良:就像是 pchome 的 bot ,一小時打五萬次,一次把所有網頁抓完,使用 linode 兩年多,才知道 CPU 最高可以達到 200%。也遇過爬蟲會自動修正網址的,會把 // 改成 / ,也有會自動幫你 decode 和 encode 網址的爬蟲。其實大部份爬蟲是不理會 robots.txt 就連 Google 也是參考用的而已。
  • 安裝了不明軟體:使用者安裝 realplayer ,會順便安裝 real downloader ,然後就會一直打某一頁。也有 p2p 的搜尋引擎,就是你裝了某個軟體,它們會借用你的頻寬來當爬蟲,像是 majestic12 project
  • 防毒軟體:防毒軟體內建 proxy ,它們先幫你抓一次網頁,確保沒問題再讓你的瀏覽器抓。哥不用防毒軟體很多年了,實際運作情況不是很清楚,是在 log 看到一堆防毒軟體的名稱。
  • 瀏覽器外掛:外掛少用!其實這很毒的。
  • proxy:像是 Opera 的 proxy ,自己修正網址造成的無限迴圈,還是會一直打...一直打...一直打...

其實倒是真正被攻擊的算少數。最近網站在升級 https 之後更為明顯,比如說在 log 裡會常看到...

http://example.com 301
https://example.com 200
http://example.com 301
https://example.com 200
....

不知為什麼,就是導不過去,最近不得已才用 nginx 的 req_limit, burst 的說明官網寫的很少,這裡有詳盡的例子和說明: http://www.cnblogs.com/php5/archive/2012/12/10/2811732.html