PHP有像Rails那样的真实性令牌吗?
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'] =
<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))如果您想要一个随机令牌,code>是一个更好的解决方案:使用!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']);