PHP使用一个随机变量来确认POST是从我自己的文件中发送的


PHP Using a randomised var to confirm that POSTs were sent from my own file?

当涉及到任何安全、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,并将其与我选择的特制请求一起提交。

简言之,您所描述的方法无法防止恶意用户向您的服务器发送任意请求。