Html PHP中防止CSRF的正确方法?当前系统没有';在某些浏览器中无法工作

Html PHP中防止CSRF的正确方法?当前系统没有';在某些浏览器中无法工作,html,forms,cookies,token,csrf,Html,Forms,Cookies,Token,Csrf,目前,我在PHP中使用一个简单的系统来防止我网站上任何形式的CSRF 基于此: 我将其包括在所有形式中: <?php $token = md5(uniqid(mt_rand(), true)); setcookie("token", $token, 0, '/', ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false); ?> <input type="hidden" name="toke

目前,我在PHP中使用一个简单的系统来防止我网站上任何形式的CSRF

基于此:

我将其包括在所有形式中:

<?php
$token = md5(uniqid(mt_rand(), true));
setcookie("token", $token, 0, '/', ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false);
?>

<input type="hidden" name="token" value="<?php echo($token); ?>" />
所以我已经在安卓手机、iPad、iPhone和一些桌面浏览器上进行了测试。除了移动版的Chrome和Android手机上的默认浏览器之外,它可以在所有浏览器上工作。在这些情况下,它每次都无法通过检查——即使它不应该这样做


我到底在做什么导致这些特定浏览器无法工作。我的印象是,我的阻止CSRF的系统是标准的?

您确定在您测试的移动设备上启用了Cookie吗?确保验证Cookie是否已实际设置。在你的setcookie调用之后-打印($\u COOKIE)并确保
token
存在。我个人没有听说过。尽管如此,我通常使用$\u会话来处理令牌,而不是$\u COOKIE。值得进一步研究。
<input type="hidden" name="token" value="<?php xecho($token); ?>" />
<input type="hidden" name="token" value="<?php xecho($token); ?>" />
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<input type="hidden" name="token" value="<?=$token;?>" />