前言
前段时间做出的某信息系统经过漏洞扫描发现存在以下三个较为严重的漏洞,一一解决之:
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
版权属于:soarli
本文链接:https://blog.soarli.top/archives/532.html
转载时须注明出处及本声明。