欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
CodeIgniter4中如何在view或者helper函数中访问当前控制器对象 在php中实现安全的用户登录、Cookie中保存登录状态(remember me)
未知  在CodeIgniter4中集成谷歌验证码 reCaptcha V2
[ 发布日期:12个月前 (12-01) ]   [ 来自:本站原创 ] [分类:原创作品]
为什么要在网站上使用验证吗?主要还是安全方面的原因。
通过验证码可以防止一些机器人和程序自动化的操作,如发送垃圾信息等。
验证码还可以防止暴力破解攻击,特别是在登录或密码重置等敏感操作时。
通过添加验证码,也可以增加攻击的难度和时间,从而减少攻击成功的可能性。

国内大厂的验证码都是收费的,之前腾讯有免费的防水墙(验证码)服务,现在也停了。
国际大厂免费的验证码服务,谷歌算是比较有名气的了。

我们这边选择的是 reCaptcha V2 版本的。
在系统集成之前,你需要先去谷歌官网申请 reCaptcha 的帐号密钥。
因为网络因素,这个是无法直接访问的,请大家参考网上的申请教程。
我们这里只介绍在CodeIgniter4系统中集成的方法。

首先,在 App\Config\App.php 中增加 密钥的配置设置。


/**
 * 谷歌验证码配置
 * reCaptcha V2
 */
public $reCaptchaV2 = ['htmlkey' => "***这里是网页端的密钥======",
                           "apikey"  => "=======这里是后端api的密钥====="                  
        ];


然后,增加两个辅助函数,辅助函数可以写到 App\Common.php 中。


第一个辅助函数,是在网页中显示验证码组件。
注意这里引用的js脚本路径,这个路径是可以在国内正常使用的。
[复制到剪贴板]

function form_verifycode(string $name="validatecode"){   
//获取扩展配置
$cfg config('App');
$key =$cfg->reCaptchaV2['htmlkey'];

$txt  '<script src="https://www.recaptcha.net/recaptcha/api.js" async="" defer=""></script>'
$txt .= '<script type="text/javascript">';
$txt .= "var verifyCallback_$name = function(response) {" ;   
$txt .= "document.getElementById(\"$name\").value = response;";
$txt .= "};</script>";

$txt .= "<div class=\"g-recaptcha\" data-callback=\"verifyCallback_$name\" data-sitekey=\"$key\"></div>";
$txt .= "<input type=\"hidden\" name=\"$name\" id=\"$name\">"
        
return 
$txt;
}
 



第二个辅助函数,php后端检查验证码正确性的。
[复制到剪贴板]

function verify_Code(string $code){
    if(empty(
$code))
        return 
false;

    
//获取扩展配置
    
$cfg config('App');
    
//使用方法
    
$post_data = array(
      
'secret' => $cfg->reCaptchaV2['apikey'],
      
'response' => $code
    
);

    
$data post_curls('https://www.recaptcha.net/recaptcha/api/siteverify'$post_data);
    
    
$vd json_decode($datatrue);
    
    if( empty(
$vd['success']) )   {    
        return 
false;
    }
return 
true;





最后是使用方式了


1,在视图文件中可以按如下方式调用。
[复制到剪贴板]

<tr>
 <
td align="right" bgcolor="#FFFFFF">验证码:</td>
 <
td bgcolor="#FFFFFF"><?=form_verifycode()?></td>
</
tr


2,在后端接受到post数据后,可以按下面方式验证
[复制到剪贴板]

if(!verify_Code($rndcode)){
   return 
$this->showErrors(null'验证码错误,请完成人机验证。');



引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/280
复制引用地址https://www.rickw.cn/trackback/280/GBK
[ 分类:原创作品  | 查看:1019 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2024 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5