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. Effective C++笔记(四):设计与声明

    参考:http://www.cnblogs.com/ronny/p/3747186.html 条款18:让接口容易被正确使用,不易被误用 1,好的接口很容易被正确使用,不容易被误用.你应该在你的所有接 ...

  2. 湖南省第六届省赛题 Biggest Number (dfs+bfs,好题)

    Biggest Number 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 You have a maze with obstacles and non-zero di ...

  3. run-time setting 中设置simulate browser cache 选项详解

    Browser  Emulation: Simulate  browser  cache:配置Vuser模拟带缓存的浏览器.缺省缓存是被允许的, 可以通过禁止该选项来使得所有VUser模拟的浏览器都不 ...

  4. Redis实战(七)

    修改数据 C#语言修改Redis示例. 1.通过key修改单个value using (var redisClient = RedisManager.GetClient()) { var user = ...

  5. Map 的四种遍历方式

    Map 的四种遍历方式 import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class ...

  6. vue 阻止事件冒泡

    <mt-button type="danger" size="small"  @click="cancelOrderInfo(this.even ...

  7. Python协程(下)

    停止子线程 如果一切正常,那么上面的例子很完美.可是,需要停止程序,直接ctrl+c,会抛出KeyboardInterrupt错误,我们修改一下主循环: try: while True: task = ...

  8. luogu P1011 车站

    题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起( ...

  9. QTREEⅠ SPOJ

    树剖模板,注意把边化为点后要查到y的儿子. #include<bits/stdc++.h> using namespace std; ; int f[N],bel[N],w[N],id[N ...

  10. [BZOj4336][BJOI2015]骑士的旅行(树链剖分+线段树)

    树链剖分,对每个叶子用multiset记录前K大士兵,其余节点通过从儿子归并维护前K大士兵.过于模板. #include<set> #include<cstdio> #incl ...