[英]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.