11:CSRF

安全247 字

■ Token使用

场景:在进行一些转账、订单操作、编辑删除文章、修改用户信息等重要操作的时候,需要确认当前操作请求是否由真实的用户主动发起的。

说明:在重要操作的表单中增加会话生成的Token字段,一次一用,提交后在服务端校验该字段。

PHP示例:页面包含生成token:

<?php
    session_start();
    function set_token() {
        $_SESSION['token'] = md5(time()+rand(1, 1000));
    }
?>

<form method="POST">
    <input name="message" type="text">
    <input type="hidden" name="token" value="<?=_SESSION['token']?>">
    <input type="submit" />
</form>
          
        

■ 二次验证

场景:在进行一些转账、订单操作、编辑删除文章、修改用户信息等重要操作的时候,需要确认当前操作请求是否由真实的用户主动发起的。

说明:在关键表单提交时,要求用户进行二次身份验证,如密码、图片验证码、短信验证码等。

PHP示例:验证token的有效性:

<?php
    session_start();
    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();
?>
          
        

■ Referer验证

场景:同上

说明:检验用户请求中Referer字段是否存在跨域提交的情况。

PHP示例:检查请求连接的referer是否合法

<?php
    session_start();
    if (strpos($_SERVER['HTTP_REFERER'], 'www.xxx.com')  !== false) {
        exit("fail");
    } else {
        // process bussiness here.
    }
?>
          
        
maksim
Maksim(一笑,吡罗),PHPer,Goper
OωO
开启隐私评论,您的评论仅作者和评论双方可见