防止CSRF跨域攻击
来源:互联网 发布:根据域名查询服务器 编辑:程序博客网 时间:2024/05/22 01:57
CSRF主要是指有些人使用自动表单提交不停的请求你的网站,或者使用非法请求连接访问站点,防止这些攻击也比较容易就是在自己网站做一个token验证基本就防止了非法请求,正常清楚我们生成的唯一token进行行为验证,如果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不正确:
正确请求:
0 0
- 防止CSRF跨域攻击
- 防止CSRF攻击
- 防止CSRF攻击
- Csrf攻击与防止
- MVC中防止CSRF攻击
- 防止CSRF攻击与protect_from_forgery
- SameSite Cookie,防止 CSRF 攻击
- 浅谈CSRF攻击-跨域攻击
- 【转】如何防止CSRF注入式攻击
- MVC Html.AntiForgeryToken() 防止CSRF攻击
- MVC Html.AntiForgeryToken() 防止CSRF攻击
- MVC Html.AntiForgeryToken() 防止CSRF攻击
- MVC Html.AntiForgeryToken() 防止CSRF攻击
- MVC Html.AntiForgeryToken() 防止CSRF攻击
- MVC Html.AntiForgeryToken() 防止CSRF攻击
- MVC Html.AntiForgeryToken() 防止CSRF攻击
- MVC Html.AntiForgeryToken() 防止CSRF攻击
- MVC Html.AntiForgeryToken() 防止CSRF攻击
- redis主从复制(详细的)
- Group BY
- Find Peak Element
- hdu 1116 Play on Words(欧拉图)
- 【手势交互】9. PS Move
- 防止CSRF跨域攻击
- VC7(VS2002)调试时 std::string 超过15字符乱码问题
- 把JTable的表头去掉
- iOS 滚动label(LED,跑马灯等) 快速实现源码
- 元组(tuple)、列表[list]的区别
- 慕课网——使用useBean的4种方式传递表单参数
- 阿里hr面总结
- linq group by应用一
- NSData 转 Int 的几种方法