当涉及到任何安全、PHP或会话相关的问题时,我是一个完全的傻瓜,但我很好奇为什么这不起作用。
假设您有一个php文件,用户在该文件上完成表单,然后通过ajax将变量POST到另一个php文件。(我知道这是不安全的,因为攻击者制作的任何表单都可以从另一个来源将任何变量POST到该文件中。)但假设你这样做:
1.php
$ran = //generate randomized var
$.ajax({
url : "2.php",
type: 'POST'
//send $ran to 2.php called random
})
2.php
<?php
require '1.php';
$random = $_POST['random'];
if ($ran != $random){
die();
}
else
{
//continue...
为什么这不安全?是否与会话相关?
当你谈论安全性时,你必须从攻击向量的角度来讨论它。
如评论中所述,您上面提到的策略将减轻CSRF攻击,即用户的浏览器被操纵向您的网站提交他们不打算发送的请求。
但是,如果用户正试图利用您的网站,则您的nonce无效。例如,如果我登录到您的网站,并且我想尝试SQL注入攻击,我可以获取生成的nonce,并将其与我选择的特制请求一起提交。
简言之,您所描述的方法无法防止恶意用户向您的服务器发送任意请求。