04-SQL注入-验证码处理

一、验证码生成原理

核心目的是确保是人在使用系统。图片验证码、拖动验证码、拼图验证码、问答验证码

计算验证码等

图片验证码的原理主要是基于以下三个方面:

1.随机生成的字符,确保无规律可言

2.使用图片来进行展示,而非其他手段

3.尽量让文字变形并形成扰乱图像

二、验证码代码实现

添加码源:vcode.php,基于PHP绘制基础图片,生成验证码,然后将验证码保存到session变量中

<?php
    session_start(); 
    // 当客户端已经获取session-ID时,只要通过HTTP请求中的cookie字段将其发给服务器,服务器不会再生成新的session ID.
    session_start();
    getCode();

    // 生成验证图片验证码  vlen验证码的长度  width 高度  height  宽度
    function getCode($vlen=4,$width=80,$height = 25){
        // 定义响应类型为PNG图片
        header("content-type:image/png");

        // 生成随机验证码字符串,并将其保存于session中
        $chars = 'abcdefjhijkmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ0123456789';
        $vcode = substr(str_shuffle($chars),0,$vlen);
        // str_shuffle($chars)将字符打乱
        $_SESSION['vcode'] = $vcode;

        // 定义图片并设置背景色RGB为:100,200,100
        $image = imagecreate($width,$height);
        $imgColor = imagecolorallocate($image,100,200,100);

        // 以RGB=0,0,0的颜色绘制黑色文字
        // 任何的定位都是在第四象限
        $color = imagecolorallocate($image,0,0,0);
        imagestring($image,5,20,5,$vcode,$color);

        // 生成一批随机位置的干扰点
        for($i=0;$i<50;$i++){
            imagesetpixel($image,rand(0,$width),rand(0,$height),$color);
        }

        // 输出图片验证码,并将其再内存的数据销毁,要不然消耗内存
        imagepng($image);
        imagedestroy($image);
    }

?>

三、在登录页面添加验证码login.html以图片的方式展示出来

 <div class="login">
                <input type="text" name="vcode"/>&nbsp;&nbsp;&nbsp;
                <img src="./vcode.php">
 </div>

四、登录验证码的校验

修改login.php

   if(strtoupper($_SESSION['vcode']) != strtoupper($vcode)){
        die("vcode-error");
    }

验证码一旦生成后,不一定必须保存在session中,任何可以存储数据的方式均可以,比如数据库,文件,内存,或者保存在Redis

缓存服务器中。比如短信验证码,通常会有一个时间限制(5分钟内有效),最好的解决方案就是使用redis缓存,并设置key的过期时间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值