3、登陆表单提交CSRF及验证码

1、表单提交,并将其提交到本页

(1) form 属性method为post方法,修改路由,使其接收post、get的请求

Route::any(‘/admin/login‘,‘Admin\[email protected]‘);

(2)LoginController.php

修改login方法,根据不同的请求返回不同的内容

如果请求方法为get ,返回登陆页面;如果请求为post,就行验证

use Illuminate\Support\Facades\Input;

public function login()
{
        if($input = Input::all()){
            dd($input);
        }else {

            return view(‘admin.login‘);
        }
}

刷新页面,如果返回如下

这是laravel csrf保护,解决:

正确显示:

2、确认验证码是否正确

(1)LoginController.php,修改login()方法

 1 public function login()
 2 {
 3         if($input = Input::all()){
 4
 5             $code = new \Code();
 6             $_code = $code->get();
 7             if(strtoupper($input[‘code‘])!=$_code){
 8             //strtoupper()函数将输入的字母转化为大写字母,否则小写也是属于不正确
 9             //back()函数返回上一请求页面,使用with将提示信息带回,信息存到session中
10                  return back()->with(‘msg‘,‘验证码错误‘);
11             }else{
12                 echo ‘ok‘;
13             }
14         }else {
15
16             return view(‘admin.login‘);
17         }
18 }

(2)修改login.blade.php,获取session

 将之前的用户名错误修改为:

@if(session(‘msg‘))
<p style="color:red">{{session(‘msg‘)}}</p>
@endif

 验证:

问题总结:

1、如果有需要用到session传参的地方,路由必须写在中间件里面

比如在控制器使用back()函数的时候return back()->with(‘msg‘,‘验证码错误‘);,如果路由不是在中间件,没有session,即使你在入口session_start(),也没有用,又不好调试;还有就是不会产生csrf_token

1 Route::group([‘middleware‘ => [‘web‘]], function () {
2
3 //路由要放中间件里面,否则会生成不了session
4
5 Route::any(‘/admin/login‘,‘Admin\[email protected]‘);//这里需要接受post传参,所以必须用混合路由
6 Route::get(‘/admin/code‘,‘Admin\[email protected]‘);
7 Route::get(‘/admin/getcode‘,‘Admin\[email protected]‘);
8
9 });

2、引入第三方类的时候,如果此类文件有用到session,那么需要在入口文件session_start(),这是最简单的解决方式了,否则会报不认识$_SESSION

友情链接:http://www.itwendao.com/article/detail/116508.html

时间: 2024-08-01 02:16:19

3、登陆表单提交CSRF及验证码的相关文章

yii2表单提交CSRF验证

Yii2表单提交默认需要验证CSRF,如果CSRF验证不通过,则表单提交失败,解决方法如下: 第一种解决办法是关闭Csrf public $enableCsrfValidation = false; 第二种解决办法是在form表单中加入隐藏域(如果是高级版的name值分前后台区分) <input type="text" name="_csrf-frontend" value="<?= Yii::$app->request->csrf

用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)

老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用. ubuntu上安装: sudo apt-get install tesseract-ocr 非常简单. 2.pytesseract和PIL(pillow) pytesseract用来在python中调用tesseract-ocr,PIL(pillow)用来加载图片,安装方法如下: pip3 in

原生JS 表单提交验证器

一.前言 最近在开发一个新项目,需要做登陆等一系列的表单提交页面.在经过“缜密”的讨论后,我们决定 不用外部流行的框架,如bootstrap,由于我负责的模块 仅仅是其中的一部分,因此少数服从多数,无奈只能抛弃bootstrap等提供的布局,样式以及验证等一些列如此方便的组件,(他们拒绝使用的原因也令人发省). 那么问题就来了. 二.设计理念 我们都知道,在抛开外部框架,仅仅用JS+css+html 去开发一个页面,是很复杂的,尤其是在没有美工,前台的情况下.其实bootstrap 在一定程度上

表单提交中get和post方式的区别

表单提交中get和post方式的区别有5点 1.get是从服务器上获取数据,post是向服务器传送数据. 2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程. 3.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Requ

yii2 表单提交一直报错 或者页面脚本写ajax,用firbug调试总是找不到地址页面404

在Yii框架中,为了防止csrf攻击,封装了CSRF令牌验证,使用Yii表单生成页面的时候,如果表单的提交方式为POST,是都会在页面中添加一个隐藏字段: <div style="display:none">     <input type="hidden" value="a429b6c0f4468db23a5661d1682db537fe2672c7" name="YII_CSRF_TOKEN" />

ajax实现登陆表单验证功能

ajax实现登陆表单验证功能:使用ajax进行表单登陆验证功能更为的人性化,下面提供一个表单验证的实例代码,代码较为简单,仅仅作为演示之用而已,多实用的ajax表单验证功能都较为复杂.下面分布分出代码:一.静态页面表单部分代码: <script type="text/javascript" src="http://www.softwhy.com/mytest/jQuery/jquery-1.8.3.js"></script> <scri

Django初体验(一):自定义表单提交

注:本人使用的Django1.8.3版本进行测试 除了使用Django内置表单,有时往往我们需要自定义表单.对于自定义表单Post方式提交往往会带来由CSRF(跨站请求伪造)产生的错误"CSRF verification failed. Request aborted." 本篇博客只要针对"表单提交"和"Ajax提交"两种方式来解决CSRF带来的错误 一.表单提交 Template: <!DOCTYPE html> <html

表单提交中文后台乱码

通过form表单提交到后台 通过form传入后台,提交方式分为post和get两种.两者的区别需要通过提交表单后才看得出来,主要是在数据发送方式和接收方式上.Post和Get都是表单属性Method的可选值,Method的默认值为Get,两者的主要区别在于: 1.在客户端,Get方式在通过URL提交数据,提交后在地址栏中的地址会出现传入到后台的参数:而Post提交后地址栏中的地址不会出现参数. 2.在服务器端只能用Request.QueryString来获取Get方式提交来的数据,用Post方式

javascprit form表单提交前验证以及ajax返回json

1.今天要做一个手机验证码验证的功能.需求是前端页面点击发送 短信验证码,后台接收后通过ajax返回到前端,之后前端在提交时候进行验证.思路很简单,不过做的过程还是学到不少的东西. 1.ajax请求后返回 returning 405 Method Not Allowed 原因是我后台返回的时候没有加上: @ResponseBody注解.加上后返回的数据是json字符串,但是js只能操作json对象.需要把json字符串转为json对象.一般的有三种方式1.JSON.parse();如 var j