繁体   English   中英

如何使用Javascript捕获后退和前进按钮并刷新?

[英]How to trap the back and forward button and refresh using Javascript?

这是针对在线考试的:我应该诱使用户使用浏览器中的“后退”和“前进”按钮,并且还应该在用户已经参加考试时刷新页面。 预先感谢您的回答和答复。

我认为该解决方案不应该依赖于客户端代码,因为它可以由客户端修改。 我认为对于某种受控环境,您可以防止客户端进入开发人员模式,这可能是可以的。

在可以控制环境的情况下,限制键盘快捷键,右键单击并提供全屏模式的浏览器应足以确保客户端正确完成任务。

否则,依赖服务器之间的客户机/客户端之间的键/值令牌的系统应完成该工作。 一些安全的在线服务依赖于这样的系统,并且如果您同意破坏“后退”和“转发”功能以及刷新页面,它将很好地起作用。 当客户端调用损坏的功能时,您肯定可以模拟回调。

在某些情况下,仅在JavaScript上才能确保页面显示很有用。 例如生成随机标识符和随机使页面永不相同等。

在任何情况下(IMO),仅出于安全目的而完全依靠JavaScript都不是(而且永远不是)一个好主意。

编辑:

这是一个概念证明:

服务器生成一个唯一,客户端使用html5本地存储功能存储该值。 使用本地存储作为键/值注册表,我们可以存储页面阶段,并将每次重新加载与存储的键与服务器新生成的键进行比较。

这非常简单明了,用作服务器生成令牌的令牌可以随机化很多,以防止任何人猜测它。

服务器生成的令牌足够长,甚至可以为客户端本地存储注册表提供良好的一次性加密密钥。

码:

<?php   
    $stamp = uniqid();
?>
<!DOCTYPE html>
<html>
<head>
<script src="//cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://raw.github.com/andris9/jStorage/master/jstorage.js"></script>
    <style>
        body{background-color:blue;}
        p{margin-left:auto;margin-right:auto;width:800px;background-color:gray;font-weight:bolder;padding:1em;}
    </style>
    <script>
    // display nice messages
    var err_reloaded_page = "page reloaded";

    var keeper = '<?php echo $stamp; ?>';
    var current = $.jStorage.get('state');
        // first initialization, Exception
        if(current ==  null){
            $.jStorage.set('state',keeper);
            current = $.jStorage.get('state');
        }

        if(current != keeper){
            alert(err_reloaded_page);
        }
    </script>
</head>
<body>
    <p>
        Proof of concept<br/>
        Can detect page reload by comparing a stamp created server-side, stored on the local storage and compared on each page reload.
    </p>
</body>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM