CSRF跨站点请求伪造漏洞问题

最近在写php,项目写完后送检发现一个漏洞问题CSRF,强行拖了我一天的时间,沉迷解决问题,茶饭不思,日渐消瘦,时间比较赶,这篇比较糙,凑合看下。

好了废话不多说下面是今天的解决方案。

博主用的是Thinkphp框架,发现这个问题的时候第一件事就是去查下相关资料,发现发现网上说可以通过表单令牌来解决这个问题。

如果不设置表单令牌,很容易导致CSRF(跨站请求伪造)、跨站提交表单。

表单令牌是一种非常实用的技术(博主ps:其实鸡肋),它在表单的视图部分生成随机令牌,默认为随机的MD5串,存在hidden的input中。在表单数据提交前,将提交的数据与SESSION中存放的令牌进行比对,从而判断是否是跨站提交。

ThinkPHP中开启表单令牌的方式比较简单,在config中进行配置(博主的路径:项目/Home/Conf/config.php):

        ‘TOKEN_ON‘=>true,  // 是否开启令牌验证
    ‘TOKEN_NAME‘=>‘__hash__‘,    // 令牌验证的表单隐藏字段名称
    ‘TOKEN_TYPE‘=>‘md5‘,  //令牌哈希验证规则 默认为MD5
    ‘TOKEN_RESET‘=>true,  //令牌验证出错后是否重置令牌 默认为true    

添加完成上面的代码后还需要在tags.php配置一波。ps:有的小伙伴没有tags.php可以在项目/Common/Conf目录下新建一个tags.php插入以下代码

<?php
return array(
    //‘配置项‘=>‘配置值‘
    ‘view_filter‘=>array(‘Behavior\TokenBuildBehavior‘),
);

然后你就可以在你的所有表单页面看到

<input type="hidden" name="__hash__" value="11f6b3285bf71a87811c3dadccb7b166_c6694a7c3a76bbf9ac7bf66a77d87310" />这个。

如果你只想在部分页面的表单加入表单令牌你可以:

C(‘TOKEN_ON’,false);

$this->display();

配置完成后在你的表单提交地址指向的方法里面加入下面代码:

if(!$Data->autoCheckToken($_POST)){
           $this->error(‘非法登陆!‘);
           }

上面的$Data是model

今天先写到这里要写代码了。

时间: 2024-11-03 21:36:24

CSRF跨站点请求伪造漏洞问题的相关文章

Django中如何防范CSRF跨站点请求伪造***

CSRF概念 CSRF跨站点请求伪造(Cross-Site Request Forgery). ***者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了***者所期望的一个操作,比如以你的名义发送邮件.发消息,盗取你的账号,添加系统管理员,甚至于购买商品.虚拟货币转账等. CSRF***原理以及过程 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A: 2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功

csrf跨站点请求伪造

什么是csrf(跨站请求伪造) 伪造请求的定义有很多种,我将不是用户本意发出的请求统称为伪造请求(在用户不知情的情况下执行某些操作)xss的通过用户对浏览器的信任造成的,csrf是通过服务器对浏览器的信任造成的 csrf的原理及过程: 假设有a用户和b网站c网站 c网站为恶意网站 a用户正常登录b网站,登录成功,b网站返回一个cookie给a用户 b用户访问c网站,c网站在a用户不知情的情况下要求a的浏览器访问b网站的特点功能,浏览器正常执行 b网站接到a浏览器的请求,正常执行a用户浏览器的请求

CSRF(跨站点请求伪造)

csrf: cross site request forgery 攻击方式: php:curl php:fsockopen 防御: 1.表单token(随机数) 2.验证码 3.referer check(检查header中的referer)

CSRF跨站请求伪造(pikachu)

一开始接触CSRF的时候其实感觉和CSS有些相似,但在学习中发现CSS其实是得到了用户的权限,但是CSRF并没有得到用户的权限,他只是借用了用户的权限完成了攻击. CSRF定义: 跨站请求伪造(英语:Cross-site request forgery)是一种对网站的恶意利用,也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法. CSRF跨站点请求伪造(Cr

我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击

我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击 概述      众所周知,ASP.Net MVC程序在浏览器运行时产生了标准的Html标签,包括浏览器要发送的关键数据等内容都在Html内容里面,听起来不错,但是假如我们仿造类似的Html内容,更改里面关键数据,在浏览器运行起来会怎么样呢?好下面我们就做这样一个例子.       CSRF攻击例子 首先我们拿以前做好的person/edit作为例子 先看控制器代码 //初始页面        

跨站点请求伪造(CSRF)

CSRF(Cross Site Request Forgery)跨站点请求伪造:攻击者诱使用户在访问 A 站点的时候点击一个掩盖了目的的链接,该链接能够在 B 站点执行某个操作,从而在用户不知情的情况下完成了一次对 B 站点的修改. CSRF 实现 Cookie 策略 Cookie 分为 Session Cookie(临时 Cookie) 和 Third-party Cookie(本地 Cookie).本地 Cookie 有失效时间,在失效时间内都可以使用.临时 Cookie 则在浏览器关闭后立

[不常用] - CSRF(跨站点请求伪造)

CSRF,Cross Site Request Forgery,即跨站点请求伪造.   这种攻击是指,在用户正常登录系统以后,攻击者诱使用户访问一些非法链接,以执行一些非法操作. 比如:如果删除用户操作(如,yourdomain.com/deluser?id=123)没有经过防范CSRF的处理,那么,假设用户登录系统后,攻击者诱使用户同时访问了攻击者的站点的一个链接(该链接正好为yourdomain.com/deluser?id=123),那么,系统就会在用户不知情的情况下丢失一个用户.    

《白帽子讲WEB安全》学习笔记之第4章 跨站点请求伪造(CSRF)

第4章 跨站点请求伪造(CSRF) 4.1 CSRF简介 CSRF(Cross-site request forgery跨站请求伪造,也被称为"one click attack"或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用. CSRF是一种依赖web浏览器的.被混淆过的代理人攻击(deputy attack). 4.2 CSRF进阶 浏览器所持有的Cookie分为两种:一种是"Sesion Cookie",又称"

CSRF(跨站点请求伪造)

引起原因:个人认为 csrf 在 Ajax 盛行的今天来说,倒是方便了,因为它可以在你不知道的情况用你的通过验证用户进行操作,所以也被称为浏览器劫持.如果你已通过某个网站的验证那么你将以你的角色对网站进行操作,比如你是管理员可以添加其它的用户到管理组,但是如果有人构造了添加管理员的链接被管理员点后也会执行相应操作. 解决方法: 修改信息时添加验证码或添加 Session 令牌(ASP.NET中已经提供一个自动防范的方法,就是用页面属性 ViewStateUserKey.在Page_Init方法中