CSRF攻击方式及解决方法

场景一:网站表单数据提交没有任何验证,直接把表单数据插入数据库。
攻击:根据提交地址直接循环访问该地址,插入数据

<form action="http://xxx.com/laravel54/public/msg" method="post">
        <p><input name="uname" type="text" value=""></p>
        <p><textarea name="content"></textarea></p>
        <p><input type="submit" value="提交"></p>
</form>

场景二:网站表单数据提交开启了session验证,表单数据插入数据库。
攻击:通过广告或链接,获取用户当前浏览器cookie,伪造header头,访问目标网站

<?php
//1.初始化(curl_http)
$ch = curl_init(); 

//2.配置
    //2.1设置请求地址
    curl_setopt($ch, CURLOPT_URL, 'https://www.XXX.com/article/ajaxedit');
    //2.2设置响应的数据流赋给变量而不是直接输出
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    //2.3设置post请求
    $postData = [];
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    //2.4伪造header头
    $header = array('Cookie:xxxxxxxxx');  
    curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
    //2.5https请求 不验证证书和hosts
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
//3.发送请求
$data = curl_exec($ch);
echo $data;die;
//4.关闭请求
curl_close($ch);
?>

解决方式

步骤1:页面所有表单提交时候生成一个随机字符串保存在session中,并且在表单中隐藏该随机字符串。
步骤2:处理表单程序进行验证(判断表单提交的隐藏的数据是否和session中的一致)

Laravel中避免CSRF攻击

1 开启csrf攻击:修改app\Http\Kernel.php中的\App\Http\Middleware\VerifyCsrfToken::class
2 在页面增加csrf隐藏域避免站内失效
<input type="hidden" name="_token" value="{{ csrf_token() }}">
注意:若表单数据要插入数据库,别忘去掉接收数据中的_token项

查看

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值