傳送簡訊驗證碼沒有判斷圖形驗證碼是否正確,被攻擊,臨時用nginx限制ip訪問
在專案中,註冊頁面上傳送簡訊驗證碼沒有判斷圖形驗證碼是否正確,就傳送驗證碼了,結果被攻擊了,nginx的access.log看到訪問的ip,並將訪問過多的ip選擇出來,臨時用nginx限制ip訪問。後面修改程式碼,重新發版。
但是,對於套了一層 CDN 或代理的網站,通過 iptables 、 Nginx 的 deny 指令或者是程式來 控制掉這些惡意請求,這些方法可能就失效了。
1拿到使用者真實 IP,只要在 Nginx 的 http 模組內加入如下配置:
1 2 3 4 5 |
#獲取使用者真實IP,並賦值給變數$clientRealIP map$http_x_forwarded_for$clientRealIp{ ""$remote_addr; ~^(?P<firstAddr>[0-9\.]+),?.*$$firstAddr; } |
2通過對 $clientRealIP 這個變數的判斷,Nginx 就能實現隔山打牛的目的,而且規則簡單易懂:
Shell
1 2 3 4 5 6 7 8 |
#如果真實IP為 121.42.0.18、121.42.0.19,那麼返回403 if($clientRealIp #如果你的nginx安裝了echo模組,還能如下輸出語言,狠狠的發洩你的不滿(但不相容返回403,試試200吧)! #add_header Content-Type text/plain; #echo "son of a bitch,you mother fucker,go fuck yourself!"; return403; break; } |
把這個儲存為 deny_ip.conf ,上傳到 Nginx 的 conf 資料夾,然後在要生效的網站 server 模組中引入這個配置檔案,並 Reload 過載 Nginx 即可生效:
1 2 |
#禁止某些使用者訪問 include deny_ip.conf; |
如果再想新增其他要禁止的 IP,只需要編輯這個檔案,插入要禁止的 IP,使用分隔符 | 隔開即可,記得每次修改都需要 reload 過載 Nginx 才能生效。