[英]How to Prevent CSRF in Play [2.0] Using Scala?
我使用play2-authenticitytoken模块:
真实性令牌是围绕最严重的互联网安全威胁之一:CRSF攻击。 它确保提交表单的客户是收到该页面的人(而不是窃取会话数据的黑客)。
这个怎么运作:
简而言之:
- 在每个表单帖子中,我们添加一个包含uuid的隐藏参数
- uuid已签名,其签名存储在会话中(转换为cookie)
当用户提交表单时,我们得到:uuid,签名和其他表单输入。
- 我们再次签署传入的uuid
- 如果签名匹配则验证通过(session.sign = uuid.sign)
如果攻击者注入了不同的id,他将永远不知道如何生成正确的签名。
自Play 2.1以来,在框架中支持这一点。 Nick Carroll写了一篇关于如何使用它的好文章:
http://nickcarroll.me/2013/02/11/protect-your-play-application-with-the-csrf-filter/
为了完整起见,我在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 )
}
}
}
解析表单时,使用以下内容检查签名:
object Authenticator extends Controller {
def login = ValidateForm{
Action { implicit request =>
Ok( views.html.index("You're Loggd In") )
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.