爬虫之验证码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")){
//根据网卡取本机配置的IP
InetAddress inet=null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress= inet.getHostAddress();
}
}
//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
if(ipAddress.indexOf(",")>0){
ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
}
}
return ipAddress;
}
我以前搞过这些东西,还访问各种网站找网站的漏洞,给同学来一个说来就来的短信轰炸。
因为以前翘过这些后门,所以给大家说说我的心路历程,我的爬虫经历,希望对大家有帮助。
爬虫之验证码IP攻防心得——小总结的更多相关文章
- Python 爬虫的代理 IP 设置方法汇总
本文转载自:Python 爬虫的代理 IP 设置方法汇总 https://www.makcyun.top/web_scraping_withpython15.html 需要学习的地方:如何在爬虫中使用 ...
- 反爬虫之搭建IP代理池
反爬虫之搭建IP代理池 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部.可惜加了header请求头,加了cookie 还是被限制爬取了.这时就得祭出IP代理池!!! 下面就是requ ...
- 关于Scrapy爬虫项目运行和调试的小技巧(下篇)
前几天给大家分享了关于Scrapy爬虫项目运行和调试的小技巧上篇,没来得及上车的小伙伴可以戳超链接看一下.今天小编继续沿着上篇的思路往下延伸,给大家分享更为实用的Scrapy项目调试技巧. 三.设置网 ...
- python爬虫构建代理ip池抓取数据库的示例代码
爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...
- 新手指南:顶象验证码如何接入微信小程序?
自2017年小程序发布以来,经过4年的快速发展,小程序已然成为企业互联网布局不可或缺的一环.无论是互联网企业还是拥抱互联网的传统企业,无论是服务导向型企业还是产品导向型企业,小程序都为用户提供了一种轻 ...
- 简单爬虫,突破IP访问限制和复杂验证码,小总结
简单爬虫,突破复杂验证码和IP访问限制 文章地址:http://www.cnblogs.com/likeli/p/4730709.html 好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有 ...
- python+tesseract验证码识别的一点小心得
由于公司需要,最近开始学习验证码的识别 我选用的是tesseract-ocr进行识别,据说以前是惠普公司开发的排名前三的,现在开源了.到目前为止已经出到3.0.2了 当然了,前期我们还是需要对验证码进 ...
- 爬虫-通过本地IP地址从中国天气网爬取当前城市天气情况
1.问题描述 最近在做一个pyqt登录校园网的小项目,想在窗口的状态栏加上当天的天气情况,用爬虫可以很好的解决我的问题. 2.解决思路 考虑到所处位置的不同,需要先获取本地城市地址,然后作为中 ...
- 爬虫防封IP
当抓取数据逐渐增大时,服务器的负荷会加大,会直接封掉来访IP: 采取措施: 1.创建请求头部信息: headers = {'User-Agent': 'Mozilla/5.0 (Windows NT ...
随机推荐
- POJ2635-The Embarrassed Cryptographer-大整数素因子
计算一个大整数(10^100)中有没有一个小于L的素因子.这个大整数是两个素数的乘积.其实就是RSA加密. 做法是把大整数表示成千进位,用数组存储,然后一位一位地取模. /*------------- ...
- 自学Zabbix7.1 IT services
自学Zabbix7.1 IT services 1. 概念IT Services 服务器或者某项服务.业务的可用率,不懂技术的上级领导会过问最近服务器可用率如何.所有api的状况怎么样?通常一些技术人 ...
- 【BZOJ3668】【NOI2014】起床困难综合症(贪心)
[NOI2014]起床困难综合症(贪心) 题面 Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚 ...
- [luogu2280][bzoj1218][HNOI2003]激光炸弹
题目描述 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标.现在地图上有n(N<=10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目标在地图上的位置,每个目标都有 ...
- intest
/* ============================================================================ Name : http.c Author ...
- Ubuntu 13.04下构建Qt5开发环境
虽然Qt命运多舛,但是也阻挡不了程序员对它的喜爱.经历了一系列波折之后,现在到在芬兰公司Digia手中,Qt又将迎来一个发展.Qt5就是在这种情况之下发布的.正值Ubuntu刚刚发布了13.04版,我 ...
- CF710F String Set Queries
CF710F String Set Queries 支持字符串的插入和删除...SAM也干不了这个事 所以可以用cdq分治+AC自动机O(nlogn)解决 但是本题强制在线~~~ 我们还有一个工具,叫 ...
- Android: 网络随时需要在3G和Wifi切换,网络程序需要注意
平时,3G和WIFI 都开着的时候,Android默认使用Wifi,但现实环境中不可能到处都有wifi,所以手机会经常自动切换网络. 有的时候,手机一开始使用wifi上网,当进入待机后10-30分钟, ...
- typescript枚举,类型推论,类型兼容性,高级类型,Symbols(学习笔记非干货)
枚举部分 Enumeration part 使用枚举我们可以定义一些有名字的数字常量. 枚举通过 enum关键字来定义. Using enumerations, we can define some ...
- 关于navicat远程连接mysql问题
如果你想连接你的mysql的时候发生这个错误: ERROR 1130: Host '192.168.1.81' is not allowed to connect to this MySQL serv ...