CSRF攻击演示
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攻击演示的更多相关文章
- php web开发安全之csrf攻击的简单演示和防范(一)
csrf攻击,即cross site request forgery跨站(域名)请求伪造,这里的forgery就是伪造的意思.网上有很多关于csrf的介绍,比如一位前辈的文章浅谈CSRF攻击方式,参考 ...
- asp.netcore mvc 防CSRF攻击,原理介绍+代码演示+详细讲解
一.CSRF介绍 1.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session ridin ...
- Flask模拟实现CSRF攻击
CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 包括:以你名义发送邮件,发消息,盗取你的账号 ...
- Flask基础(17)-->防止 CSRF 攻击
CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 包括:以你名义发送邮件,发消息,盗取你的账号 ...
- 浅析history hack、心血漏洞、CSS欺骗、SQL注入与CSRF攻击
漏洞产生的原因主要有系统机制和编码规范两方面,由于网络协议的开放性,目前以 Web 漏洞居多 关于系统机制漏洞的典型有JavaScript/CSS history hack,而编码规范方面的漏洞典型有 ...
- CSRF攻击原理及预防手段
CSRF全程 Cross Site Request Forgery, 跨站域请求伪造.这种攻击方式相对于XSS,SQL注入等攻击方式比较晚被发现,今天就来讲解下这种攻击方式以及避免方式. 攻击过程 ...
- 风炫安全web安全学习第二十八节课 CSRF攻击原理
风炫安全web安全学习第二十八节课 CSRF攻击原理 CSRF 简介 跨站请求伪造 (Cross-Site Request Forgery, CSRF),也被称为 One Click Attack 或 ...
- 安全防御之防xss、SQL注入、与CSRF攻击
XSS攻击 个人理解,项目中最普通的就是通过输入框表单,提交js代码,进行攻击例如在输入框中提交 <script>alert("我是xss攻击");</scrip ...
- 保护ASP.NET 应用免受 CSRF 攻击
CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/ ...
随机推荐
- set -o vi AIX下shell
set -o vi 再用esc+K键就可以使用上一条指令了 esc+kesc+j上下翻 ksh默认是emacs风格的.set -o emacs 在AIX下使用自己已经使用过的命令 在AIX下使用,默认 ...
- 关于JavaScript中实现继承,及prototype属性
感谢Mozilla 让我弄懂继承. JavaScript有八种基本类型,函数属于object.所以所有函数都继承自object.//扩展:对象,基本上 JavaScript 里的任何东西都是对象,而且 ...
- fail2ban安全设置
1.先安装fail2ban服务包(这里我采用的是fail2ban-0.8.14.tar.gz) 2.解压安装包 cd /data/software tar xzf fail2ban-0.8.14.ta ...
- 四、ansible主机组定义
1.打开hosts文件 vim /etc/ansible/hosts 2.定义一个主机组 [web-server] 192.168.1.1 3.定义多个组(继承) [web:children] web ...
- 得分(UVa1585)
题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...
- vim进阶-自己设置vim编辑器
我这是最基础的一些vim设置,参考文章http://blog.csdn.net/huiguixian/article/details/6394095 看大牛设置的vim,感觉很花里胡哨,以后慢慢接触: ...
- 【C#日期系列(二)】--C#获取一段时间有多少个星期几
#region 统计一段时间内有多少个星期几 ///<summary> ///统计一段时间内有多少个星期几 ///</summary> ///<param name=&q ...
- DotNetOpenAuth实践之Windows签名制作
系列目录: DotNetOpenAuth实践系列(源码在这里) 在上篇中我们搭建了一个简单的认证服务器,里面使用到了Windows签名证书,这一篇则是教大家如何制作Windows签名证书,下面进入正题 ...
- git使用点滴:如何查看commit的内容
在push之前有时候会不放心是不是忘记加某些文件,或者是不是多删了个什么东西,这时候希望能够看看上次commit都做了些什么. 一开始想到的是用Git diff,但是git diff用于当前修改尚未c ...
- 转:linux关闭防火墙iptables
ref:https://jingyan.baidu.com/article/066074d64f433ec3c21cb000.html Linux系统下面自带了防火墙iptables,iptables ...