【问题标题】:How does Play! 2.3.x verify cookies haven't been tampered with?怎么玩! 2.3.x 验证cookies没有被篡改?
【发布时间】:2018-02-06 01:38:03
【问题描述】:

在 Play 2.3.x 的 documentation 中:

当然,cookie 值是使用密钥签名的,因此客户端无法修改 cookie 数据(否则会失效)。

我很想知道 Play 如何验证签名 cookie。所以按照代码,cookies是parsed from the headerdecoded in the Cookie helper但是当我查看requestcookieheader时数据没有签名?

At this line 表达式 cookieHeader 的计算结果为:sessionId=72312312312369; Path=/; HTTPOnly

该值不应该还包含可以使用应用程序机密验证的签名值吗?

【问题讨论】:

    标签: cookies playframework session-cookies digital-signature playframework-2.3


    【解决方案1】:

    是的,应该。 PLAY_SESSION(或您将其重命名的任何名称)必须在开头包含签名部分,例如

    PLAY_SESSION=eyJhbGcxxxxxxxxx-userid...
    

    eyJhbGcxxxxxxxxx 是符号部分。在你链接的文件中,可以发现这部分是

    在第 430 行生成:https://github.com/playframework/playframework/blob/2.3.x/framework/src/play/src/main/scala/play/api/mvc/Http.scala#L430

    并在第 467 行验证:https://github.com/playframework/playframework/blob/2.3.x/framework/src/play/src/main/scala/play/api/mvc/Http.scala#L467

    【讨论】:

    • 哇,谢谢,原来我们的 Cookie 没有被签名,因为我们没有使用withSession,而是使用了withCookies
    猜你喜欢
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多