CSRF就是伪装成用户做坏事!

它的手段可能是:

一张引发邪恶请求的图片:

<img src="http://localhost/demoA.php?money=500" />

一个嵌入的iframe

<iframe src="http://localhost/demoA.php?money=800" frameborder="0"></iframe>

一个会自动提交的表单:

<body onload="javascript:document.forms[0].submit()">
<form method="get" action="http://localhost/demoA.php">
<input type="hidden" name="money" value="300">
</form>
</body>

....等

某天抠门的你慷慨解囊地去A站捐了100块:

http://localhost/demoA.php

<?php
//把money插入表
session_start();
//A站session
$_SESSION['admin']="admin";
$conn = mysql_connect("localhost", "root", "open00") or die("数据库连接失败!");
mysql_select_db("test", $conn);
mysql_query("set names utf8");
$money=$_GET['money'];
$sql="insert into `mytable` (`money`) values('".$money."')";
if(isset($_SESSION['admin'])){
mysql_query($sql);
echo "你捐款了".$money."块";
}else{
echo "未登录,不能操作";
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>A站</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="money" value="100"> <input type="submit" value="提交">
</form> </body>
</html>

然后你不知怎么的从一个网页上看到这样一个图片,诱惑到不行啊 ~ =_=!!

手贱点击了一下~跳转到B站~然后又捐了300块! 花擦!你一辈子都没捐那么多!

<a href="http://127.0.0.2/demoB.php"><img src="猥琐图" /></a>

怎么回事!到底是怎么回事呢?我们看看B站代码,就是访问的时候向A发送了一个请求,而这时候你登录着A站,所以A站以为是你本人操作,就执行了:

http://127.0.0.2/demoB.php

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>B站发起CSRF</title>
</head>
<body onload="javascript:document.forms[0].submit()">
<form method="get" action="http://localhost/demoA.php">
<input type="hidden" name="money" value="300">
</form>
</body>
</html>

=======================================

你跟站长打了小报告,A站站长一怒之下在表单内加入了随机token值,页面每提交一次就变更一次,B站没办法制造出一样的token所以再也攻击不了了

functions.php

<?php
//CSRF防卫token
function gen_token()
{
$token = md5(uniqid(rand(), true));
$_SESSION['token'] = gen_token();
} function gen_input()
{
gen_token();
echo '<input type="hidden" name="token" value="' . $_SESSION['token'] . '">';
}
?>

demoA.php

<?php
//把money插入表
session_start();
include("functions.php");
//A站session
$_SESSION['admin']="admin";
$conn = mysql_connect("localhost", "root", "open00") or die("数据库连接失败!");
mysql_select_db("test", $conn);
mysql_query("set names utf8");
$money=$_POST['money'];
$sql="insert into `mytable` (`money`) values('".$money."')";
//判断用户登录
if(isset($_SESSION['admin'])){
//判断是否带有正确的token
if(isset($_SESSION['token']) && $_POST['token']==$_SESSION['token']){
mysql_query($sql);
echo "你捐款了".$money."块";
}else{
echo "请点击提交按钮";
}
}else{
echo "未登录,不能操作";
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>A站</title>
</head>
<body>
<form action="" method="post">
<input type="text" name="money" value="100">
<? gen_input(); ?>
<input type="submit" value="提交">
</form>
</body>
</html>

=================数据库=====================

--
-- 数据库: `test`
--

-- --------------------------------------------------------

--
-- 表的结构 `mytable`
--

CREATE TABLE `mytable` (
`money` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CSRF攻击演示的更多相关文章

  1. php web开发安全之csrf攻击的简单演示和防范(一)

    csrf攻击,即cross site request forgery跨站(域名)请求伪造,这里的forgery就是伪造的意思.网上有很多关于csrf的介绍,比如一位前辈的文章浅谈CSRF攻击方式,参考 ...

  2. asp.netcore mvc 防CSRF攻击,原理介绍+代码演示+详细讲解

    一.CSRF介绍 1.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session ridin ...

  3. Flask模拟实现CSRF攻击

    CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 包括:以你名义发送邮件,发消息,盗取你的账号 ...

  4. Flask基础(17)-->防止 CSRF 攻击

    CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 包括:以你名义发送邮件,发消息,盗取你的账号 ...

  5. 浅析history hack、心血漏洞、CSS欺骗、SQL注入与CSRF攻击

    漏洞产生的原因主要有系统机制和编码规范两方面,由于网络协议的开放性,目前以 Web 漏洞居多 关于系统机制漏洞的典型有JavaScript/CSS history hack,而编码规范方面的漏洞典型有 ...

  6. CSRF攻击原理及预防手段

      CSRF全程 Cross Site Request Forgery, 跨站域请求伪造.这种攻击方式相对于XSS,SQL注入等攻击方式比较晚被发现,今天就来讲解下这种攻击方式以及避免方式. 攻击过程 ...

  7. 风炫安全web安全学习第二十八节课 CSRF攻击原理

    风炫安全web安全学习第二十八节课 CSRF攻击原理 CSRF 简介 跨站请求伪造 (Cross-Site Request Forgery, CSRF),也被称为 One Click Attack 或 ...

  8. 安全防御之防xss、SQL注入、与CSRF攻击

    XSS攻击 个人理解,项目中最普通的就是通过输入框表单,提交js代码,进行攻击例如在输入框中提交 <script>alert("我是xss攻击");</scrip ...

  9. 保护ASP.NET 应用免受 CSRF 攻击

    CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/ ...

随机推荐

  1. 深度学习方法(九):自然语言处理中的Attention Model注意力模型

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.NET/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 上一篇博文深度学习方法(八):Enc ...

  2. 洛谷 P2077 红绿灯 题解

    题目传送门 这道题一秒一秒的扫描一定会超时,所以就用一种O(N)的算法. #include<bits/stdc++.h> using namespace std; ],b[],c[],x= ...

  3. 洛谷 P1652圆 题解

    题目传送门 这道题也就是考你对几何的了解: 圆与圆没有公共点且一个圆在另一个圆外面时,叫做圆与圆相离. 当圆心距大于两圆半径之和时,称为两圆外离: 当圆心距小于两圆半径之差的绝对值时,称为两圆内含. ...

  4. Adminimize 插件:WordPress根据用户角色显示/隐藏某些后台功能

    倡萌刚才分享了 WordPress根据用户角色隐藏文章/页面的功能模块(Meta Boxes),如果你还想根据不同用户角色显示或隐藏后台的某些功能,比如 顶部工具条.左边导航菜单.小工具.仪表盘.菜单 ...

  5. Java学习(匿名对象、内部类、包、import、代码块)

    一.匿名对象 概念:匿名对象是指在创建对象时,只有创建的语句,却没有把对象地址值赋给某个变量. 特点: (1)匿名对象直接使用,没有变量名.当做形参使用. new Person().name=&quo ...

  6. Python 中for...esle和while...else语法

    Python的for...else和while...else语法,这是Python中最不常用,最为误解的语法特性之一. Python中的for.while循环都有一个可选的else分支(类似if语句和 ...

  7. Linux下Diff命令

    一般正常比较两个文件用vimdiff,算是直接进入vim界面,如果比较两个文件夹下面的文件,可以用diff,注意,这里只会比较文件夹下面的同名文件,他会列出不一样的点. 参考Linux下Diff命令使 ...

  8. Linux的权限对于文件与目录的意义

    权限对文件: r:可读取此文件的实际内容. w:可以编辑.新增或者是修改该文件的内容(但不含删除该文件),如果没有r权限,无法w. x :该文件具有被系统执行的权限.可以删除. 权限对目录: r:re ...

  9. s12-day04-work01 简单计算器功能实现

    代码: #!/usr/local/env python3 ''' Author:@南非波波 Blog:http://www.cnblogs.com/songqingbo/ E-mail:qingbo. ...

  10. bzoj 1224

    dfs + 剪枝, 用最大最小值剪. #include<bits/stdc++.h> #define LL long long #define fi first #define se se ...