soarli

防止CSRF跨站攻击解决方案
前言前段时间做出的某信息系统经过漏洞扫描发现存在以下三个较为严重的漏洞,一一解决之:CSRF攻击示例CSRF防范过...
扫描右侧二维码阅读全文
13
2021/07

防止CSRF跨站攻击解决方案

前言

前段时间做出的某信息系统经过漏洞扫描发现存在以下三个较为严重的漏洞,一一解决之:

CSRF攻击示例

CSRF防范过程

生成动态密钥:

<?php
//构造动态验证密钥防止跨站攻击
$CSRFvalue = "xxxxx".time(); // 通过指定字符串拼接时间戳生成动态验证字符串
// setcookie('ShenFen', $CSRFvalue , time()+3600);
// $hash = md5($_COOKIE['ShenFen']);
// $hash = ($_COOKIE['ShenFen']);
$hashCSRFvalue = md5($CSRFvalue); // 将动态验证字符串hash加密得到动态密钥(会填写到表单的input隐藏栏随登陆行为一并提交,该值会在本程序最后存入session,供验证使用)(如果直接验证用户提交的值是否等于该值则永不成立)(该值总会随着页面加载动态刷新)
// echo $hashCSRFvalue;
header('X-Frame-Options:Deny'); // 阻止frame嵌套
header('X-Powered-By:soarli'); // 测试使用
?>

表单中插入:

<input type="hidden" name="checkCSRF" value="<?=$hashCSRFvalue;?>">

接收到表单的验证:

if (!is_array($Username) && !is_array($Password) && $_POST['checkCSRF'] == $_SESSION['hashCSRFvalue']) { // 提交的不是password[]或password[]类型防止addslashes报错 并且 CSRF验证码匹配成功
    xxxx
}

Session记录生成的动态密钥:

$_SESSION['hashCSRFvalue'] = $hashCSRFvalue;

测试截图:

参考资料:

www.php.cn/php-ask-430558.html

www.cnblogs.com/sevck/p/5209489.html

www.cnblogs.com/ayseeing/p/4325879.html

blog.csdn.net/weixin_42275932/article/details/81001616

最后修改:2022 年 01 月 09 日 03 : 53 AM

发表评论