假设您已经在twitter中创建了oauth客户端应用程序,则可以转到http://twitter.com/apps进行管理。当我查看HTML页面的源代码时,我发现它们在表单定义中使用了一个隐藏表单参数,称为真实性令牌。
<form method="post" id="sign_out_form" action="/sessions/destroy" style="display:none;">
<input name="authenticity_token" value="18c9957agd7ysdjgsgd87sgdjs"
type="hidden"/>
</form>
<form action="/oauth_clients/regenerate_keys/299120" id="regenerate_keys_form"
method="post" style="float: right;">
<input name="authenticity_token" type="hidden"
value="18c9957agd7ysdjgsgd87sgdjs" />
<input type="submit" id="regenerate_keys" value="Reset Consumer Key/Secret"
class="btn"/>
</form>
假设整个网页都是通过SSL访问的,那么这些真实性令牌的基础是什么?他们永远不会改变;因此它们不是随机数。有人可以启发我了解他们的工具吗?
最佳答案
这是Rails的标准功能(Twitter的前端是在其中编写的)。真实性令牌是每个会话生成的随机字符串,用于防止CSRF attacks。您可以了解有关攻击媒介的更多信息以及Rails为什么在Rails Security Guide上使用真实性令牌的原因。完全在SSL下提供服务的应用程序无法阻止CSRF攻击;目的只是为了确保在对资源进行POST / PUT / DELETE时,它是从应用程序生成的表单中完成的,并且已被用户以某种形式看到。