网站验证码的生成原理、难度控制,及python实现

news/2024/5/10 12:59:12/文章来源:https://blog.csdn.net/weixin_34187862/article/details/89571644

图片验证码已经广泛的使用在各种反爬虫的场景中,验证码的的生成验证过程对于开发者来说是零成本的,对于用户体验来说可能稍差、但是对于爬虫来说是致命的和高成本的。


下面将介绍使用python实现网站验证码的产生及验证的全过程,然我们对验证码的生成有所理解,同时对于机器识别在验证码利于的作用有个认识。


其过程是是用户请求验证后,生成验证码图片并后台session保存验证的字符串,当用户提交验证信息后,取出后台session中的字符集对比,相同的则验证通过。

def get(self):
from PIL import Image, ImageDraw, ImageFont
import random
# 定义变量,用于画面的背景色、宽、高
bgcolor = (random.randrange(20100), random.randrange(20100), 255)
width = 100
height = 25
# 创建画面对象
im = Image.new('RGB', (width, height), bgcolor)
# 创建画笔对象
draw = ImageDraw.Draw(im)
# 调用画笔的point()函数绘制噪点
for i in range(0100):
xy = (random.randrange(0, width), random.randrange(0, height))
fill = (random.randrange(0255), 255, random.randrange(0255))
draw.point(xy, fill=fill)
# 定义验证码的备选值
str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
# 随机选取4个值作为验证码
rand_str = ''
for i in range(04):
rand_str += str1[random.randrange(0, len(str1))]
# 构造字体对象
font = ImageFont.truetype('static/fonts/STLITI.TTF'23)
# 构造字体颜色
fontcolor = (255, random.randrange(0255), random.randrange(0255))
# 绘制4个字
draw.text((52), rand_str[0], font=font, fill=fontcolor)
draw.text((252), rand_str[1], font=font, fill=fontcolor)
draw.text((502), rand_str[2], font=font, fill=fontcolor)
draw.text((752), rand_str[3], font=font, fill=fontcolor)
del draw
session["verifycode"] = rand_str
buf = io.BytesIO()
im.save(buf, 'png')
self.set_header('Content-Type''image/jpg')
self.write(buf.getvalue())


session["verifycode"] = rand_str是在网站后台的session中保存正确的验证值,在post提交登陆后进行对比。


buf = io.BytesIO()、im.save(buf, 'png')是创建bytes类型的内存对象用于保存生成的图片数据。


self.set_header('Content-type','image/jpg')

self.write(buf.getvalue()),构件response相应对象返回前端。


效果如下:

2019-03-22-17_16_17.png

2019-03-22-17_16_17.png

2019-03-22-17_16_17.png

效果还是不错,生成验证码的复杂度和字符集相关、和字体相关、和噪点相关,也可以生成表达式类型的验证码,同时因为采取随机生成,几百万张图片中也不会存在相同的图片,可见验证码对于反爬虫而言任然是最简单、无成本的反爬虫措施。


------------------------------


ID:Python之战


|作|者|公(zhong)号:python之战 


专注Python,专注于网络爬虫、RPA的学习-践行-总结


喜欢研究技术瓶颈并分享,欢迎围观,共同学习。


独学而无友,则孤陋而寡闻!


---------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_745202.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站跨站点单点登录

昨天和几位朋友探讨到了这个话题,发现虽然单点登录,或者叫做独立的passport登录虽然已经有了很多实现方法,但是能真正了解并实现的人却并不太多,所以些下此文,希望从原理到实现,能让大家了解的多一些 至于…

谈谈网站静态化

写在前头 静态化是解决减轻网站压力,提高网站访问速度的常用方案,但在强调交互的We2.0 时代,对静态化提出了更高的要求,静态不仅要能静,还要能动,下面我通过一个项目,谈谈网站静态化后的架构设计方案,同时和大家探讨一下,在开源产品大行其道,言架构必称MemberCache, Nginx,的时…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标,可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间,指从发出请求到最后收到响应数据所需要的时…

建立网站 --- 了解常用的服务端

电脑的使用方式主要分为两大类 : 客户机 和 服务器 客户机: 访问其他主机的机器,通过ISP (因特网业务提供者)上网时,客户机被分配了一个临时的IP地址,利用这个临时IP地址,客户机…

Flask项目之手机端租房网站的实战开发(一)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 项目源码下载 一丶项目介绍 产品:关于手机移动端的租房网站角色:在这个产品中用户包括房东与房客功能:房东可以…

Flask项目之手机端租房网站的实战开发(二)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/85613780 目录 一丶创建项目 二丶创建工程目录(拆分manage.py) 三丶以开发环境进行项目测试 一丶创建项目 1 新建…

Flask项目之手机端租房网站的实战开发(四)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/85676643 目录 一丶在项目中添加静态资源文件 二丶关于csrf防护机制 三丶用户注册模块(图片验证码以及短信验证码…

Flask项目之手机端租房网站功能测试(完结)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶注册和登录以及用户退出功能 二丶上传头像功能和修改用户名功能测试 三丶发布房源以及实名认证功能测试 四丶网站房屋搜索功能测试 …

使用Python开发轻量级的Web框架以及基于WSGI的服务器来实现一个网站页面

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目说明 二丶数据准备 三丶使用网络TCP开发一个基于WSGI协议的Web服务器 四丶使用python3开发一个轻量级的Web框架 五丶在框架中实…

Django项目之Web端电商网站的实战开发(一)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 项目源码下载 目录 一丶项目介绍 二丶电商项目开发流程 三丶项目需求 四丶项目架构概览 五丶项目数据库设计 六丶项目框架搭建 一丶项目介绍 …

Flask项目之个性化微电影网站的实战开发(一)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 项目源码下载 目录 一丶叙述 二丶Windows环境搭建 三丶项目分析丶搭建目录以及模型设计 四丶搭建前台页面 一丶叙述 1.项目中使用到的知识点 …

Django项目于之在线教育平台网站的实战开发(一)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 项目源码下载 目录 一丶叙述 二丶Windows环境搭建 三丶数据库模型设计 四丶搭建后台管理系统 五丶使用xadmin注册方式注册模型表 六丶xadmin后…

Django项目于之在线教育平台网站的实战开发(完结)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/90141577 项目源码下载 目录 一丶常见web攻击及防范…

Django与Elasticsearch交互打造搜索引擎网站(一)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 项目源码下载 目录 一丶叙述 二丶elasticsearch-rtf的安装与测试 三丶elasticsearch-head插件以及kibana的安装 四丶elasticsearch搜索引擎的使…

2020 搭建一个属于自己的动态网站(WordPress+云服务器BCC)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 文章目录前言一、WordPress是什么?二、建站准备1.准备服务器2.准备域名三、网站搭建1.安装宝塔面板2.宝塔面板搭建站点3.域名解析4.通过…

2021 搭建一个属于自己的静态网站(Hexo+GitHub Pages)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 文章目录前言一、Hexo是什么?二、GitHub Pages是什么?三、建站准备1.准备Github账号2.准备域名四、网站搭建1. 安装 Node.js…

2021 WordPress 网站迁移(从百度云BCC 迁移到 阿里云ECS)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 文章目录前言一、迁移准备1. 备份原网站2. 备份数据库3. 准备服务器4. 准备好域名5. ICP域名备案二、网站迁移1. ICP备案成功2. 安装宝塔面板3. 创建…

网站架构基础学习(详细)

网站架构基础学习(详细) 1.网站架构的发展经历: 初始阶段的网站(特点:没人)应用程序,数据库,文件都在一个服务器中 比如我们学的是开发,我们要写一个网站,因为这是一个项目, 所以我们要把它部署一下&#x…

云服务器怎么显示网站数据库名称,云服务器怎么显示网站数据库

云服务器怎么显示网站数据库 内容精选换一换本章节指导您使用MongoDB客户端,通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例。操作系统使用场景:弹性云服务器的操作系统以Linux为例,客户端本地使用的计算机系统以Windows为例。目标…

给自己的网站带来和平:实现自动开启Cloudflare的5秒盾和验证码

引言 梦也不分明,远山云乱横。 ——勿埋我心 你的网站有没有被攻击过?这个脚本虽然不能抵御那些恐怖的“洪流”,但是抵挡一下“小打小闹”应该问题不大。   原理:通过检测系统负载(cpu或load)自动开启clo…