防止CSRF跨域攻击
2015-07-29 17:42
716 查看
CSRF主要是指有些人使用自动表单提交不停的请求你的网站,或者使用非法请求连接访问站点,防止这些攻击也比较容易就是在自己网站做一个token验证基本就防止了非法请求,正常清楚我们生成的唯一token进行行为验证,如果token通过则执行操作,否则就不通过,防止了无限请求刷自己网站的情况。
首先生成token存到session中:
index.php
测试结果:
非法请求:
带了csrf参数,但是token不正确:
正确请求:
首先生成token存到session中:
index.php
//生成一个密匙 function create_key() { $key = md5(((float) date("YmdHis") + rand(100,999)).rand(1000,9999)); return $key; } //产生token function create_token(){ $key = create_key(); $salt = 'MYKEY'; $token = md5($salt.$key); return $token; } session_start(); $_SESSION['client_key'] = create_token(); $_SESSION['server_key'] = $_SESSION['client_key']; header("Location:login.php");login.php
<!DOCTYPE html> <html> <head> <title>csrf测试</title> </head> <body> <?php session_start(); $key = $_SESSION['client_key']; ?> <form action="dologin.php" method="post"> 用户名:<input name="name" type="text"/><br/> 密码:<input name="pass" type="text"/><br/> <input type="hidden" name="csrf" value="<?php echo $key; ?>" /><br/> <input type="submit" value="提交" /> </form> </body> </html>dologin.php
<?php sleep(1); //print_r($_POST); extract($_POST); //判断key是否相等 session_start(); $server_key = $_SESSION['server_key']; //判断是否有csrf参数 if (!array_key_exists('csrf', $_POST)) { die("未知请求"); } else if($server_key != $csrf){ die("参数错误"); }else{ die("正确请求业务逻辑处理"); } ?>这些代码只是简单的验证了一下token,实际开发中,token的生成可能规则不是这么简单,这样写就防止,不法分子使用自动表单来不停的对网站发送请求了,那个防刷新表单重复提交其实,原理都差不多,不太难理解,大家随意参考下吧。
测试结果:
非法请求:
带了csrf参数,但是token不正确:
正确请求:
相关文章推荐
- socket编程——一个简单的例子
- 后台管理,给列表页新增查询功能,所遇到的问题及感想
- 几个简单的html+css+js题目
- shell命令行快速编辑命令
- $.post
- memcache
- Window下memcached安装与测试步骤
- E2202 Required package 'VclJPG' not found
- Android学习之路
- oracle数据类型(3)
- createjs初学-所有的显示对象介绍(2)
- 根据文字算出文字所占区域大小(用于创建多个UILabel时可以用)(不知道这个方法的天猫程序员自从看到这个方法已经哭晕在厕所)
- 欢迎使用CSDN-markdown编辑器
- Contribute/Submit A QEMU Patch
- iOS开发——动画编程OC篇&(一)基本动画
- 解决git版本冲突不能push
- 类似体育彩功能
- 如何使用jQuery技术开发ios风格的页面导航菜单
- VM增加centos6.5磁盘容量
- Java基础学习总结(41)——JPA常用注解