Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为了防止CSRF,存储令牌会话或Cookie哪个更好?_Php_Mysql - Fatal编程技术网

Php 为了防止CSRF,存储令牌会话或Cookie哪个更好?

Php 为了防止CSRF,存储令牌会话或Cookie哪个更好?,php,mysql,Php,Mysql,我正在研究我的web应用程序的安全问题。我必须处理CSRF。通过了许多参考,但其中一些使用了Cookie,而其他使用了会话为了防止CSRF,您需要在客户端和服务器上存储共享令牌,因此当客户端发出请求时,可以将其提交的值与已知值进行比较 对于客户端,您可以使用cookie或隐藏表单字段(我个人更喜欢隐藏字段,所以我不会在客户端浏览器中为每个表单都堆积cookie) 在服务器上,您可以使用会话(会话id存储在cookie中)或将其存储在数据库中(尽管您可能需要使用会话来标识属于客户端的记录) 下面是

我正在研究我的web应用程序的安全问题。我必须处理CSRF。通过了许多参考,但其中一些使用了Cookie,而其他使用了会话

为了防止CSRF,您需要在客户端和服务器上存储共享令牌,因此当客户端发出请求时,可以将其提交的值与已知值进行比较

对于客户端,您可以使用cookie或隐藏表单字段(我个人更喜欢隐藏字段,所以我不会在客户端浏览器中为每个表单都堆积cookie)

在服务器上,您可以使用会话(会话id存储在cookie中)或将其存储在数据库中(尽管您可能需要使用会话来标识属于客户端的记录)

下面是一些非常基本的CSRF预防代码示例

session_start();

if (isset($_POST) && isset($_POST['csrf'])) {
    var_dump($_POST, $_SESSION);
    if ($_POST['csrf'] == $_SESSION['CSRF_FORM1']) {
        print 'You win cookies!';
    }
    else {
        print 'You win a bucket of vomit!';
    }
}

$_SESSION['CSRF_FORM1'] = md5(microtime());

?>
<form action="" method="post">
    <input type="hidden" name="csrf" value="<?php print $_SESSION['CSRF_FORM1']; ?>" />
    <input type="submit" value="Good form Jack!" />
</form>

<form action="" method="post">
    <input type="hidden" name="csrf" value="badValue" />
    <input type="submit" value="Bad form Jack!" />
</form>
session_start();
如果(isset($_POST)和&isset($_POST['csrf'])){
变量转储($\u POST,$\u会话);
如果($\u POST['csrf']=$\u会话['csrf\u FORM1'])){
打印“你赢了饼干!”;
}
否则{
打印“你赢了一桶呕吐物!”;
}
}
$_SESSION['CSRF_FORM1']=md5(microtime());
?>

会话也使用cookies。你应该试着把这个问题扩展一点,陈述一些你所关心的背景和实际问题。