日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫之验证码IP攻防心得——小总结

發布時間:2025/3/15 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫之验证码IP攻防心得——小总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小前言:

一般來說,現在很多平臺注冊、登錄的時候會涉及到驗證碼,這樣做的目的是為了防止惡意程序惡意訪問,從而給服務器造成一定的壓力,會浪費一定的資源,大家也都知道,現在這種短信平臺,郵箱平臺等都是收費的,如果不做這種防范措施,可能你今晚對某短信平臺充值,第二天早上醒來就會收到一條消費多少條短信讓你去充值的信息。不是吹牛,我以前做過這種事的,我還專門去找這種網站,玩一玩短信轟炸,郵箱轟炸等。

?

?

言歸正傳,該怎么去防范這種措施呢??

·驗證碼

·IP?

·更多?

當然,所有安全都不是絕對的,安全和方便自古以來都是相生相克,想安全點,就得麻煩一點,想方便一點,就沒那么安全。?

?

?

驗證碼限制:?

?

?

?

現在網上都有很多jar包直接拿來用就行了,或者使用一些開源框架,比如Apache的jcaptcha等等。但是呢,驗證碼限制也是可以破解的,但是驗證碼的防范措施已經阻止了大概70%的惡意程序(本來搞惡意破壞的就不會太多,就算不太多,我們是不是也得防著點)。再說一個額外話題,別人怎么去破解驗證碼呢?驗證碼上面會布滿幾個數字、或者是幾個字母、或者是字母數字的組合、也可能是幾個漢字、等等。破解驗證嗎要用到投影直方圖分割,卡殼法,二值化等技術,比如這張二維碼是4個字母(一般都是這種),把這張圖片分割成4份,每份一個字母,然后使用相應的技術破解驗證碼得到里面的value。所以平時大家所見的驗證碼的背景都會布滿一些條條杠杠,這些不是想擾亂客戶的視線,這是擾亂惡意程序的破解。好了,來說說IP怎么限制吧。?

?

IP限制:

?IP的限制當然是很重要的,當然,這也是可以破解的,這個留到后面說。 什么IP限制呢?你每訪問一個網頁或者網站,在后臺都可以得到你的IP地址,然后在后臺把這個IP記住,你連續給某個手機號 發送驗證碼吵過多少次,就禁止這個IP發送驗證碼。

?


一般情況,是把這個IP放到緩存里,你發一次短信,相應的值就+1,如果超過某個值,后臺就不會給這個手機號或者郵箱發送驗證碼。如果做得次一點,那就把它放到session里,key的話就是你的ip,值得話就是你發短信的次數。

?

很多人很好奇,這個惡意程序怎么破擊IP地址呢?IP地址不是唯一的嗎? 不知道大家聽說過代理沒有,也就是惡意程序訪問的是代理,然后代理去訪問你的網站,然后頻繁切換代理訪問,所以代理是后臺多級反向代理所得到的真實IP, 可能你知道這個IP攻擊過你的網站,可是你根本找不到這個人,因為你根本無從下手去找。然后你拿著IP上網查一下,發現這個IP的地址是美國洛杉磯。。。

?

獲得客戶端真實IP地址的方法一:

public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); }

?

?獲得客戶端真實IP地址的方法二:

public String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }

?

?以上方法還不行的話就采用如下方法:

/*** 獲取當前網絡ip* @param request* @return*/ public String getIpAddr(HttpServletRequest request){String ipAddress = request.getHeader("x-forwarded-for");if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("Proxy-Client-IP");}if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("WL-Proxy-Client-IP");}if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getRemoteAddr();if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){//根據網卡取本機配置的IPInetAddress inet=null;try {inet = InetAddress.getLocalHost();} catch (UnknownHostException e) {e.printStackTrace();}ipAddress= inet.getHostAddress();}}//對于通過多個代理的情況,第一個IP為客戶端真實IP,多個IP按照','分割if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15if(ipAddress.indexOf(",")>0){ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));}} return ipAddress; }

?

?我以前搞過這些東西,還訪問各種網站找網站的漏洞,給同學來一個說來就來的短信轟炸。

?

?

?因為以前翹過這些后門,所以給大家說說我的心路歷程,我的爬蟲經歷,希望對大家有幫助。

?

轉載于:https://www.cnblogs.com/Java-web-wy/p/7199973.html

總結

以上是生活随笔為你收集整理的爬虫之验证码IP攻防心得——小总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。