阻止后退按钮暴露安全页面?

2024-01-05

我遇到了浏览器缓存的(显然是常见的)问题,并且我的安全页面可以通过后退按钮访问(在用户注销后)。

这是我的 logout.php

<?php
    // 1. Find the session 
    session_start();

    // 2. Unset all the session variables
    $_SESSION = array();

    // 3. Destroy the session cookie
    if(isset($_COOKIE[session_name()])) {
        setcookie(session_name(), '', time()-42000, '/');
    }

    // 4. Destroy the session
    session_destroy();

    redirect_to('index.php?logout=1');
?>

这成功地注销了 IE7、IE8、Chrome 和 Firefox 上的用户,但在 Safari 中,我可以按后退按钮(注销后立即)并仍然看到安全内容。如果我刷新安全页面,它会将我引导到登录屏幕(正如它应该的那样。)

我尝试过使用:

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">

……但是没有效果。有人可以提供任何建议吗?我找到了本文 http://www.mnot.net/cache_docs/关于浏览器缓存,但我还没有在其中找到答案......尽管我确实找到了:

<?php
 Header("Cache-Control: must-revalidate");

 $offset = 60 * 60 * 24 * 3;
 $ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
 Header($ExpStr);
?>

...这也没有解决“问题”。唔。


如果您可以使用 HTTPS,则将其与Cache-control: no-cacheheader 将禁用“页面缓存”(内存/后退缓存的 WebKit 术语)。这样做的缺点是,它将对所有安全页面视图禁用,而不仅仅是在注销后。 (Source http://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/;请注意,他们正在努力允许例外,值得密切关注。)

如果您可以依赖 JavaScript,请附上unload事件处理程序将阻止“页面缓存”。这样做的好处是还允许您仅在单击“注销”按钮或链接时才破坏缓存,然后附加unload事件处理程序。 (Source http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/)

这些解决方案都不是理想的,但其中一个可能是值得的妥协。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阻止后退按钮暴露安全页面? 的相关文章

随机推荐