我正在处理我的网络应用程序的安全问题。我必须处理CSRF。通过许多引用,但其中一些使用 Cookie ,而其他使用 SESSION 。
答案 0 :(得分:1)
对于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>