Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.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有像Rails那样的真实性令牌吗?_Php_Ruby On Rails 3_Authentication_Token - Fatal编程技术网

PHP有像Rails那样的真实性令牌吗?

PHP有像Rails那样的真实性令牌吗?,php,ruby-on-rails-3,authentication,token,Php,Ruby On Rails 3,Authentication,Token,PHP有自己版本的Rails真实性令牌吗 <meta name="csrf-token" content="<%= form_authenticity_token %>" /> <meta name="csrf-param" content="authenticity_token" /> 如果没有,实现相同功能的最佳方法是什么?输出到表单时: $token = md5(time() . rand(1,100)); $_SESSION['token'] =

PHP有自己版本的Rails真实性令牌吗

<meta name="csrf-token" content="<%= form_authenticity_token %>" />
<meta name="csrf-param" content="authenticity_token" />


如果没有,实现相同功能的最佳方法是什么?

输出到表单时:

$token = md5(time() . rand(1,100));
$_SESSION['token'] = $token;

<input type='hidden' name='token' value='<?=$token;?>'/>

你会如何评价使用像recaptcha这样的东西?我注意到twitter在注册表单中没有使用captcha,令牌可以防止CSRF攻击,但captcha会阻止非人类用户(并防止CSRF攻击)。你在找哪一个?都是。。。twitter是如何得逞的?@mtokoly他们可能也在使用类似于Akismet的服务来匹配IPs,看看它是否成功matches@Booski它看起来像是
$token=bin2hex(openssl_random_pseudo_bytes(16))是一个更好的解决方案:使用
!isset
而不是
empty
,与
=
而不是
==
进行比较也应该足够了。如果你真的想阻止CSRF,在为你的会话生成令牌之前,你应该检查
If(!isset($\u SESSION['token'])
,这样第三方网站就不能为你的网站创建一个新令牌(如果它已经存在)并使旧令牌无效。这是为了CSRF保护。但如今,CSRF保护可以在没有此类令牌的情况下完成,只需使用特殊的cookie参数即可。你可能想看看是哪一个自动完成的。
if(empty($_POST['token']) || $_POST['token'] !== $_SESSION['token']){
  exit("Bad token!");
}
unset($_SESSION['token']);