验证码识别

Shiro学习(22)集成验证码

被刻印的时光 ゝ 提交于 2019-12-20 06:49:55
在做用户登录功能时,很多时候都需要验证码支持,验证码的目的是为了防止 机器人 模拟真实用户登录而恶意访问,如暴力破解用户密码/恶意评论等。目前也有一些验证码比较简单,通过一些OCR工具就可以解析出来;另外还有一些验证码比较复杂(一般通过如扭曲、加线条/噪点等干扰)防止OCR工具识别;但是在中国就是人多,机器干不了的可以交给人来完成,所以在中国就有很多打码平台,人工识别验证码;因此即使比较复杂的如填字、算数等类型的验证码还是能识别的。所以验证码也不是绝对可靠的,目前比较可靠还是手机验证码,但是对于用户来说相对于验证码还是比较麻烦的。 对于验证码图片的生成,可以自己通过如 Java 提供的图像API自己去生成,也可以借助如JCaptcha这种开源Java类库生成验证码图片;JCaptcha提供了常见的如扭曲、加噪点等干扰支持。本章代码基于《第十六章 综合实例》。 一、添加JCaptcha依赖 Java代码 <dependency> <groupId>com.octo.captcha</groupId> <artifactId>jcaptcha</artifactId> <version>2.0-alpha-1</version> </dependency> <dependency> <groupId>com.octo.captcha</groupId> <artifactId

【代码实现】PHP生成各种随机验证码

断了今生、忘了曾经 提交于 2019-12-17 16:07:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 文章来源:PHP开发学习门户 (自行开发的个人网站) 验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录、论坛恶意灌水等。本文将通过实例讲解使用PHP生成各种常见的验证码包括数字验证码、数字+字母验证码、中文验证码、算术验证码等等以及其Ajax验证过程。 下载示例源码 PHP生成验证码图片 PHP生成验证码的原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码保存在Session中。PHP生成验证码的大致流程有: 1、产生一张png的图片; 2、为图片设置背景色; 3、设置字体颜色和样式; 4、产生4位数的随机的验证码; 5、把产生的每个字符调整旋转角度和位置画到png图片上; 6、加入噪点和干扰线防止注册机器分析原图片来恶意破解验证码; 7、输出图片; 8、释放图片所占内存。 示例代码。 session_start(); getCode(4,60,20); function getCode($num,$w,$h) { $code = ""; for ($i = 0; $i < $num; $i++) { $code .= rand(0, 9); } //4位验证码也可以用rand(1000,9999)直接生成 //将生成的验证码写入session,备验证时用 $

完美验证码识别系统,验证码插件使用帮助文档

别等时光非礼了梦想. 提交于 2019-12-11 12:45:55
该验证码插件为《完美验证码识别系统V3.2.1》的python封装,提供给UiBot实现需验证码识别的场景的解决方案。 载入识别库 LoadDat(datPath, password) 函数说明: 从文件中载入识别库文件,成功返回True,否则返回False。 参数: 参数名 类型 说明 datPath 文本型 识别库文件所在全路径 password 文本型 识别库调用密码 返回值: 返回结果 类型 说明 True boolean型 载入识别库成功 False boolean型 载入识别库失败 示例: import wmcode // 识别库路径 Dim datPath = "d:\\demo\\辽宁-12345606.dat" // 识别库密码 Dim password = "12345606" // 字库标识 Dim flag // 加载识别库 flag = wmcode.LoadDat(datPath,password) If flag TracePrint("识别库加载成功") else TracePrint("识别库加载失败") end if LoadDatEx(datPath, password) 函数说明: 从文件中载入识别库文件,成功返回字库实例Id,失败返回-1。 该函数用于多个字库同时使用场景。根据字库id对不同的图片进行识别。 参数: 参数名 类型 说明

图像识别技术——验证码识别

六月ゝ 毕业季﹏ 提交于 2019-12-09 12:51:33
[1] 一、数字图像处理基础 一幅图像可以定义为一个二维数组f(x,y),这里x,y是空间坐标,而在任何一对空间坐标(x,y)上的幅值f称为该点图像的强度或灰度。当x,y和幅值f为有限的、离散的数值时,称该图像为数字图像。 自然界呈现在人眼中的图像是连续的模拟信号,在计算机处理前,必须用图像传感器把光信号转换为表示亮度的电信号,再通过取样和量化得到一副数字图像。取样是对图像在坐标上进行离散化的过程,每一个取样点称为一个像素。量化是对图像灰度上的离散化过程。取样后将得到M*N个像素,每个像素量化得到一个灰度值L,以L表示灰度值的允许取值范围,则数字图像存储需要的比特数b可以表示为: 图像的灰度值取值范围被称为图像的动态范围。把占有灰度级全部有效段的图像称为高动态范围图像,高动态范围图像有较高的对比度。相反,地动态范围的图像看上去是冲淡了的灰暗格调。 二、图像的预处理: 主要是对图像进行灰度化、二值化、抑噪(滤波)等技术。 1、图像的灰度化 RGB系统中一个颜色值由3个分量组成,这样的图像称为彩色图像,RGB系统称为颜色空间模型。常见的颜色空间模型还有HSI、CMYK等。如果一幅图像的颜色空间是一维的(一个颜色值只有一个颜色分量),则这幅图像就是一副灰度图。在位图图像中,一般以R=G=B来显示灰度图像。 图 1 原始图片 常用的灰度化方法有以下三种: (2.1) (2.2) (2.3)

图形验证码在携程的实践之路

左心房为你撑大大i 提交于 2019-12-09 11:04:03
作者简介:闵杰,携程信息安全部产品经理。2015年加入携程,主要负责黑产防刷,验证码,反爬以及UGC方面的产品设计,关注在低成本的前提下,解决以上场景的实际问题。本文由携程技术中心投稿,微信公号ID:ctriptech 从互联网行业出现自动化工具开始,验证码就作为对抗这些自动化尝试的主要手段登场了,在羊毛党,扫号情况层出不穷的今天,验证码服务的水平也直接决定一家互联网企业的安全系数。作为WEB看门人,它不仅仅要做到安全,也要兼顾体验。 本文将分享携程信息业务安全团队在这几年里,对图形验证码服务所做的一些大大小小的改变。各位可以将本文作为自身网站图形验证码搭建的小攻略,减少重复踩坑的情况。 1.0时代 过去携程曾经使用了一套基于.NET的图形验证码作为控制登录,注册,发送手机短信,点评,重置密码以及其他相关场景的主要手段,目的也很简单,就是防止非实人的请求。 在这个阶段,设计时仅仅是满足了防御异常请求,并没有考虑太多用户体验以及产品上线后,运营数据收集再分析改造的需求。 主要实现的功能点为:  图片验证一次失效  图片生成超时失效  支持生成4位和6位验证码,字符以英文和数字组成  支持简单的字符粘连,干扰线,干扰点,字体,字符大小,字体扭曲等配置。 验证码图示: 事后来看,这套验证码系统由于架构简单,接入简便,在很长一段时间内,担当了携程门户主要的看门人的角色

结合网上的图形验证码思路和方案,弄了一个比较复杂的图形验证码工具,可以比较有效防OCR

妖精的绣舞 提交于 2019-12-09 11:03:19
验证码效果如下:有静态的,动态的,中空的 结合网上的图形验证码技术,不依赖第三方包纯java加工了一个比较复杂的图形验证码方案,防OCR防机器人 网上的图形验证码方案都是零星的,弄了一个随机字体、随机彩色字符、随机字体大小、随机扭曲、随机旋转等技术,能有效的防OCR、描边、深浅色等技术识别 本意是想区分登录、领券、抽奖等一些场景操作的,后来一想,随机拼人品吧,于是就有了下面的工具类 package com.test; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.FontFormatException; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io

简单的验证码识别

会有一股神秘感。 提交于 2019-12-09 11:00:10
这是我尝试写的第一篇技术博客,借鉴了很多博客和教程,写出了自己的代码,代码较为冗杂而且程序十分耗时。所以本文主要提供验证码识别的一个简单的思路,代码实现的部分还望各位大佬指点。 看了好几篇验证码图片识别的博文,不难归纳出验证码识别的大概思路是 收集训练集——>图像处理——>得到图片特征值——>训练——>识别 ,其中图像处理部分又包括了 灰度化、二值化、去噪、分割 等过程。本文将尽量有详有略地讲述整个过程,以及本菜鸡在开发过程中遇到的问题。 话不多说,现在开始。 一、训练集的收集 要收集足够多的验证码,只需要写一个简单的 爬虫 ,去一些各大网站的登录系统爬取就好。本菜鸡爬的是自己学校教务系统的登录网站,所以不太方便附上代码。本菜鸡总共爬取了500张验证码作为训练集,以及200张验证码用于测试,并已将自己得到的验证码放到了github上,github地址在文末给出。 这一过程需要注意,必须要 手动输入这些验证码的答案 ,并将这些答案保存下来。而且为了提高识别的正确率,需要 检查自己输入的验证码内容是否有误 接下来我们就要对收集到的训练集进行处理。 二、图像处理 以下用到了Python3的PIL(Pillow)库: 1、干扰线的处理 让我们先来看看得到验证码图片: 我们可以看到,每一张验证码图片上,都有很多的干扰线,虽然这些干扰线不会影响到我们自己识别验证码

网页登录时验证码功能的实现

≡放荡痞女 提交于 2019-12-09 10:51:21
网页登录时验证码功能的实现 在我们日常上网时,经常会遇到要登录的界面,我们会发现他会让你输入账号,密码外,还需要输入随机生成的验证码。 作用: 不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。 效果如下图所示: 点击图片或刷新页面,都可以刷新验证码图片。下面就为大家讲解这个功是如何实现的。 在这里说明一下,针对这个功能的实现,我是在后端使用Java语言生成图像的方式来实现。我对其实现的代码进行了封装,将其做成一个工具类。以便再其他场景的使用,和代码移植的便捷性。 以下就是该工具类: ImageUtils类 package com.wdhcr.tools; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.geom.Line2D; import java.awt.image.BufferedImage; import

图形验证码在移动端形同虚设?

試著忘記壹切 提交于 2019-12-09 10:36:39
随着人工智能的逐步成熟,互联网技术的渐渐迭变,图形验证码的安全性也愈发岌岌可危。那么,如今的机器是如何识别图形验证码的呢? 图形验证码(或是拖拽、点触类验证码)的初衷在于人机验证,最初,其将利用机器进行违规操作的人挡在门外,从而保障互联网的安全。然而,科技发展到如今,这个可供识别人机的验证方式仿佛已难以保障其安全性。小编今日就带着看官们了解一下,机器识别图形验证码究竟有多神。 据网络上的机器破解图形验证码原理中介绍,机器识别一个普通图形验证码仅需4步,还有根据概率、机器学习等大量的方法来完成的。类似于此的破解方式只要上网搜索便可获取不少,已经不是什么技术难题,更不是机密。即使不少网站及APP更新了自己的验证码,增加了其难度,但以目前人工智能高速发展的水平来看,智商已经赶超人类的机器们通过快速的学习,也能够轻易的识别这些图形验证码。 综上,可以看到图形验证码的未来,早已被高速进步的人工智能所影响。未来,随着人工智能的普及,图形验证码的安全性也将愈发脆而不坚。 除此以外,影响着图形验证码发展的还有其人机验证的初衷。 据相关数据显示,PC端和移动端的比例大约是2比8,2015年淘宝每天的IP点击量约4200万,天猫每天的IP点击量约2700万,可知IP比例占到64%,2016年此数据有所降低,淘宝每天的IP点击量约3600万,而天猫每天的IP点击量已经降到约1400万

如何设计相对安全的图形验证码?

懵懂的女人 提交于 2019-12-09 10:32:05
今天,我将结合自己以往在安全测试方面的一些经验,简单的分享一下图形验证码相关的安全问题,要回答上面这个问题,我们需要先了解一些关于图形验证码的基本知识。 验证码是什么? 验证码(CAPTCHA)即“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。 它有什么作用呢? 简单概括如下: 验证码在网络投票、交友论坛、网上商城等业务中,经常用来防止恶意用户侵入、恶意灌水、刷票,爆破、撞库、接口滥用等问题,为防止客户端用程序进行自动识别,因此图片中通常要加上一些干扰象素,由用户肉眼识别其中的验证码信息。客户输入表单提交时,验证码也提交给网站服务器,只有验证成功,才能执行相应的操作,其在Web安全中有着重要的应用。    好了,废话不多说,为了回答我们最初的问题,我们必须要知道图形验证码在设计和使用中有哪些坑,哪些地方容易出问题。 列举一些在安全测试中发现的设计和使用上的安全问题 供大家参考(欢迎大家补充,指正) 设计或使用方法不当: 0x01 :图形验证码数值在返回包中返回前端(可通过自动化程序输入验证码,导致验证码无效,导致防护失效) 0x02 :图形验证码的值由前端生成,发送到后端形成图片 0x03