假设您已经在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访问整个网页,这些真实性令牌的基础是什么?他们从未改变;因此它们不是随便的。有人可以启发我的实用程序吗?
答案 0 :(得分:4)
这是Rails的标准功能(Twitter的前端编写)。真实性令牌是每个会话生成的随机字符串,用于防范CSRF attacks。您可以阅读有关攻击媒介的更多信息以及Rails在Rails Security Guide上使用真实性令牌的原因。在SSL下完全提供服务的应用程序不会阻止CSRF攻击;目的只是确保当对资源进行POST / PUT / DELETE时,它是从应用程序生成的表单中完成的,并且已由用户以某种形式看到。