返回介绍

4.3.2 漏洞防范

发布于 2024-10-11 22:07:43 字数 1374 浏览 0 评论 0 收藏 0

防御 CSRF 漏洞的最主要问题是解决可信的问题,即使是管理员权限提交到服务器的数据,也不一定是完全可信的,所以针对 CSRF 的防御有以下两点:1)增加 token/referer 验证避免 img 标签请求的水坑攻击,2)增加验证码。

4.3.2.1 Token 验证

Token 翻译中文为“标志”,在计算机认证领域叫令牌。利用验证 Token 的方式是目前使用的最多的一种,也是效果最好的一种,可以简单理解成在页面或者 cookie 里面加一个不可预测的字符串,服务器在接收操作请求的时候只要验证下这个字符串是不是上次访问留下的即可判断是不是可信请求,因为如果没有访问上一个页面,是无法得到这个 Token 的,除非结合 XSS 漏洞或者有其他手段能获得通信数据。

图 4-9 (引用自乌云网)

Token 实现测试代码如下:

<?php

session_start (); 

function set_token () {

$_SESSION['token'] = md5 ( time () +rand ( 1 , 1000 )); 

}

function check_token () {

  if ( isset ( $_POST['token'] ) &&$_POST['token'] === $_SESSION['token'] ) 

  {

    return true ; 

  }

  else{

    return false ; 

  }

}

if ( isset ( $_SESSION['token'] ) &&check_token ()) {

     echo "success" ; 

}

else{

    echo "failed" ; 

}

set_token ();? >

<form method="post">

  <input type="hidden" name="token" value="<?=$_SESSION['token']?>">

  <input type="submit"/>

</form>

运行结果,如果请求里面的 Token 值跟服务器端的一致,则输出“success”,否则输出“failed”。

4.3.2.2 验证码验证

验证码验证没有 Token 那么实用,考虑到用户体验,不可能让用户每个页面都去输入一次验证码,这估计用户得疯掉,所以一般这种方式只用在敏感操作的页面,比如像登录页面,实现方式跟 Token 差不多,这里就不再详细给出代码。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文