Jac*_*ter 17 security scala csrf playframework playframework-2.0
许多Web框架都有一个标准设置,用于使用auth令牌生成表单.
我是否必须手动创建此类措施,或者Play是否采用了防止CSRF的方法?
Play网站上的文档似乎没有解决这个问题.
小智 11
我使用play2-authenticitytoken模块:
真实性令牌是围绕最严重的互联网安全威胁之一:CRSF攻击.它确保提交表单的客户是收到该页面的人(而不是窃取会话数据的黑客).
这个怎么运作:
简而言之:
- 在每个表单帖子中,我们添加一个包含uuid的隐藏参数
- uuid已签名,其签名存储在会话中(转换为cookie)
当用户提交表单时,我们得到:uuid,签名和其他表单输入.
- 我们再次签署传入的uuid
- 如果签名匹配则验证通过(session.sign = uuid.sign)
如果攻击者注入了不同的id,他将永远不知道如何生成正确的签名.
为了完整起见,我在Scala for Play 2.0中有一个例子
此方法还使用cookie +隐藏字段方法.
使用该SessionKey操作来帮助签署表单:
object Application extends Controller {
def login = SessionKey{ (key,signature) =>
Action { implicit request =>
Ok( views.html.login(signature) ).withSession( key->signature )
}
}
}
Run Code Online (Sandbox Code Playgroud)
解析表单时,使用以下内容检查签名:
object Authenticator extends Controller {
def login = ValidateForm{
Action { implicit request =>
Ok( views.html.index("You're Loggd In") )
}
}
}
Run Code Online (Sandbox Code Playgroud)
自Play 2.1以来,在框架中支持这一点.Nick Carroll写了一篇关于如何使用它的好文章:
http://nickcarroll.me/2013/02/11/protect-your-play-application-with-the-csrf-filter/
| 归档时间: |
|
| 查看次数: |
3203 次 |
| 最近记录: |