如何防止操作修改 cookie?

Posted

技术标签:

【中文标题】如何防止操作修改 cookie?【英文标题】:How do I prevent an action from modifying a cookie? 【发布时间】:2012-07-11 13:23:53 【问题描述】:

我想确保我的方法不会修改某些 cookie,例如 PLAY_FLASH 和 PLAY_SESSION(为什么?因为bug 785)。

我试过了:

// This method should never modify any PLAY cookie.
public static void doNothingPost() throws InterruptedException 
    logger.info("Done nothing");

    response.cookies.remove("PLAY_FLASH");
    response.cookies.remove("PLAY_ERRORS");
    response.cookies.remove("PLAY_SESSION");

    ok();

好吧,事实证明respone.cookies.remove() 会主动删除一个 cookie(具有过去到期日期的 SetCookie)。我如何告诉 play 不要为特定的 cookie 发送任何 SetCookie 标头? (还是全部?)

【问题讨论】:

也在论坛上:groups.google.com/forum/?fromgroups#!topic/play-framework/… 【参考方案1】: t0 -> 调用 setSession t5 -> 调用 doNothing t10 -> setSession 返回

t15 -> doNothing 返回

public static void setSession(String uuid)
    Cache.add(uuid, "guven");
    response.setCookie("username", "guven");
    await(1000);
    ok();


public static void doNothing(String sameUUIDWithSetSessionParameter)
    String username = Cache.get(sameUUIDWithSetSessionParameter, String.class);
    Cache.delete(sameUUIDWithSetSessionParameter);
    Logger.info("dn: " + username);
    await(1000);
    ok();

如果这些连续的ajax调用没有不同的session id,那么忘记uuid参数,直接使用session.getId()Cache获取值

【讨论】:

以上是关于如何防止操作修改 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

预防session劫持

如何防止 Laravel 中的会话/cookie 刷新?

如何防止 Django 覆盖 sessionid cookie?

防止 cookie 欺骗

Cookie 中的 Angular JWT 如何防止 CSRF/XSRF 和 XSS

cookie和session页面随机数和防止重复提交