安全校验Session验证码并避免绕开验证码攻击
已经记不得是在哪个网站上看到的了,一般情况下对于验证码的校验,大家很容易写成下面这样:
代码如下:
<%
If Request.Form("SecurityCode") = Session("SecurityCode") Then
' TODO : Database operations
Else
Response.Write "Security code incorrect!"
End If
%>
验证码图片产生Session("SecurityCode")并保存正确的验证码值,然后获得用户提交的验证码值,然后两个一比对如果一样则表示验证码正确,否则验证码错误。表面上这样的算法没有什么问题,但是对于一种特殊情况则会让验证码形同虚设。
首先我们知道,对于上面的算法有个核心的地方就是我们要访问产生验证码图片的那个文件才会有个保存验证码值的Session,然后才能对用户的输入进行正确的比对,假如有心人构造一个绕开验证码图片文件的Form然后进行提交会得到什么呢?Session("SecurityCode")不存在为空,如果此时用户验证码什么都不输入,这时验证码校验就形同虚设了。好,这里利用漏洞攻击的关键就是验证码的Session,我们很容易就能够让服务器不产生这个Session从而使这样的攻击变成可能。
解决的方法也很容易,校验验证码的Session是否为空或者校验用户输入的验证码是否合法,构造安全表单的关键就是永远不要相信用户的输入。下面采用校验验证码Session和用户输入的双保险办法解决这个安全问题:
代码如下:
' str为要校验的验证码,len为验证码长度
Function IsSecurityCodeValid(str, len)
IsSecurityCodeValid = Not CBool( _
IsEmpty(str) Or CStr(str)="" Or Len(str)<len)
End Function
If IsSecurityCodeValid(Request.Form("SecurityCode"), 4) AND _
IsSecurityCodeValid(Session("SecurityCode"), 4) AND _
Request.Form("SecurityCode") = Session("SecurityCode") Then
' TODO : Database operations
Else
Response.Write "Security code incorrect!"
End If
相关推荐
-
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
需要修改的几个文件: ①register.php 生成随机数和加密值 把register.html改为register.php,并开启session: 把register.js中生成随机数的函数写在register.php中,并改用php方法 <?php session_start();?> .... <?php //生成随机数函数 function showval(){ $num = ""; for($i=0;$i<4;$i++){ $tmp = rand(1
-
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
本文实例总结了CI框架常用经典操作类.分享给大家供大家参考,具体如下: 1. 超级对象中的URI CI_URI类的解析url的相关信息 直接使用$this->uri可以使用它的相关属性 system/core/URI.php文件中 部分常用属性: (1) 分段获取url相关信息 $this->uri->segment(4); //获取url中pathinfo //的第四段的值 入口文件.php/控制器/动作/参数1/参数2/... (2) 通过方法中的形参传参 需要设默认值和顺序要注意
-
PHP 用session与gd库实现简单验证码生成与验证的类方法
验证码是为了防止机器灌水给网站带来污染以及增加服务器负担而出现的.目前大大小小的网站都有验证码.今天自己实现了一个简单的验证码类.说简单是因为没有加一些干扰的弧线等等,只是将文字旋转了一下.当然,因为字体的原因,要想一眼看出来并不容易.同时,为了避免字母的大小写与数字混淆,又去掉了那些看起来很像的字母数字. 类: <?php /** *简单生成验证码类 */ class Captcha { private $width;//验证码宽度 private $height;//验证码高度 privat
-
通过Session案例分析一次性验证码登录
验证码的实现原理: 在一个Servlet中生成验证,并把验证码上的数据保存在Session,用户提交验证码之后,会提交给另外一个Servlet程序.在获取用户提交数据的Servlet中的从Session中把验证码取出,在取出的同时从Session中把验证码删除. 1.注册页面:register.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
-
JSP动态生成验证码存储在session作用范围内
(1)在登录应用中,为防止恶意登录,常常需要服务器动态生成验证码并存储在session作用范围中,最后以图像形式返回给客户端显示 (2)下边的代码实现的功能:写一个JSP页,动态生成一个验证码,存储在session作用范围内,并以图像形式返回给客户端显示. 另写一个JSP页面,引用此JSP页面生成的验证码: authen.jsp代码如下: <%@ page import="java.awt.*,java.awt.image.*,java.util.*,com.sun.image.codec
-
安全校验Session验证码并避免绕开验证码攻击
已经记不得是在哪个网站上看到的了,一般情况下对于验证码的校验,大家很容易写成下面这样: 复制代码 代码如下: <% If Request.Form("SecurityCode") = Session("SecurityCode") Then ' TODO : Database operations Else Response.Write "Security code incorrect!" End If %> 验证码图片产生Sessi
-
一个简单安全的PHP验证码类、PHP验证码
一,验证码示例 二,php验证码类,secoder.class.php <?php /** * 安全验证码 * * 安全的验证码要:验证码文字扭曲.旋转,使用不同字体,添加干扰码 * * @author 流水孟春 <cmpan(at)qq.com> * @link http://labs.yulans.cn/YL_Security_Secoder * @link http://wiki.yulans.cn/docs/yl/security/secoder */ class YL_Secu
-
php生成图片验证码-附五种验证码
以前输出验证码的时候用过一个方法,在前台用JS生成验证码字符串,再传递到后台用PHP输出验证码图像.这样在验证时就不需要使用$_SESSION传递验证码的值,直接用JS比较生成的字符串和输入的字符串是否相等即可. 本文以实例演示5种验证码,并介绍生成验证码的函数.PHP生成验证码的原理:通过GD库,生成一张带验证码的图片,并将验证码保存在Session中. 1.HTML 5中验证码HTML代码如下: <div class="demo"> <h3>1.数字验证码&
-
Django中使用pillow实现登录验证码功能(带刷新验证码功能)
首先在项目里建立common目录,编写验证码的函数 verification_code.py import random from PIL import Image, ImageFont, ImageDraw def get_code(): mode = 'RGB' bg_width = 180 #这个是验证码那个框框的宽度 bg_height = 30 #这个是验证码那个框框的高度 bg_size = (bg_width, bg_height) bg_color = (255, 255, 25
-
php实现的数字验证码及数字运算验证码
本文实例讲述了php实现的数字验证码及数字运算验证码.分享给大家供大家参考.具体如下: 1. 数字验证码: <?php //第一个实例是数字验证码,最常见的验证码.多少个数字可以由自己决定. //$num是生成的验证码包含几个数字 getValidate(4,60,20); function getValidate($num,$w,$h){ $code = ""; for($i=0;$i<$num;$i++){ $code .= rand(0,9); } //code变量最
-
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
最近在设计一款产品,需要POST登录PHPWind,然而众所周知,PHPWind9(以下简称pw9)自身拥有安全策略,详情各位可以自己去phpwind官方论坛看.安全策略的存在会导致即便站长关闭验证码策略依然在登陆时会显示验证码(前提是该用户重试太多次). 要POST登录,并且不需要验证码,就得处理这个问题,然而官方并没有提供解决的方案,只能依赖自己处理. 首先要明白,phpwind不像众多简单的php程序一般只是简单的该页面代码放置于对应文件中,每一次访问都会调用wekit.php,再由wek
-
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
最近做微信端的页面遇到了一个之前没有遇到过的一个页面,刚开始放在那没有去写,可是等其他页面都写好的时候,还是得回过头来研究这个页面问题,刚开始我请教了公司的移动研发,从他那里得到启发,最终实现了这个效果,先把效果图展示出来给大家看看 效果图: 输入验证码 粘贴图片输入完毕 下面就把实现过程奉献给大家 第一步:编写HTML代码 <div class="main-out"> <p class="identifying-title">输入企业提供的
-
python爬虫之验证码篇3-滑动验证码识别技术
滑动验证码介绍 本篇涉及到的验证码为滑动验证码,不同于极验证,本验证码难度略低,需要的将滑块拖动到矩形区域右侧即可完成. 这类验证码不常见了,官方介绍地址为:https://promotion.aliyun.com/ntms/act/captchaIntroAndDemo.html 使用起来肯定是非常安全的了,不是很好通过机器检测 如何判断验证码类型 这个验证码的标识一般比较明显,在页面源码中一般存在一个 nc.js 基本可以判定是阿里云的验证码了 <script type="text/j
-
java实现验证码类生成中文验证码
复制代码 代码如下: package xwcms.net.service;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;im
-
使用 laravel sms 构建短信验证码发送校验功能
laravel 实现短信验证码功能,搜索资料发现比较流行的有两个包: 一个是laravel sms 地址 https://github.com/toplan/laravel-sms 一个是easy sms 地址https://github.com/overtrue/easy-sms, 项目中需要实现一个发送和验证短信验证码的功能.以前的办法稍显繁琐.经高人指点,发现可以用 laravel-sms 这个包替代.且配置和使用简单易学.故有了这篇示例. 本例使用了Laravel 5.5. Api S
随机推荐
- 微信小程序 wx.request(接口调用方式)详解及实例
- innerText 使用示例
- Bootstrap输入框组件简单实现代码
- Mysql实时备份实现方法
- php实现的mongodb操作类
- Python的Django中django-userena组件的简单使用教程
- ubuntu上在androidstudio中启动emulator闪退的解决方法
- 删除重复数据的算法
- jQuery使用$.each遍历json数组的简单实现方法
- javascript教程之不完整的继承(js原型链)
- 浅谈Python2.6和Python3.0中八进制数字表示的区别
- js精度溢出解决方案
- Android编程实现状态保存的方法分析
- Java数据结构之稀疏矩阵定义与用法示例
- 使用JS模拟锚点跳转的实例
- Mysql数据库双机热备难点分析
- Django中间件基础用法详解
- JavaScript面向对象中接口实现方法详解
- Swift中排序算法的简单取舍详解
- MyBatis-Plus通过插件将数据库表生成Entiry,Mapper.xml,Mapper.class的方式