在 ASP.NET 页面中禁用 Print Screen 键和所有键盘按键






3.59/5 (10投票s)
在 ASP.NET 页面中禁用 Print Screen 键和所有键盘按键
引言
在本文中,我将解释如何在安全应用程序(例如在线考试系统或任何您想要保护的应用程序)中禁用 Print Screen 键或键盘。
有些人可以通过使用 Print Screen 键、获取 HTML 源代码甚至打印问题来窃取您的数据。
我们面临 4 个挑战,以创建考试或安全应用程序的页面:
- 禁用 Print Screen 键并清除任何剪贴板数据
- 避免使用键盘或鼠标
- 隐藏 HTML 源代码中的数据
- 避免使用打印页面
第一步是避免使用 Print Screen 键
要解决此问题,您必须通过 JavaScript 函数访问用户的剪贴板。
<script language="javascript" type="text/javascript">
function AccessClipboardData() {
try {
window.clipboardData.setData('text', "No print data");
} catch (err) {
txt = "There was an error on this page.\n\n";
txt += "Error description: " + err.description + "\n\n";
txt += "Click OK to continue.\n\n";
alert(txt);
}
}
</script>
此函数清除任何剪贴板对象,并在消息中设置一个新的剪贴板,如前面的示例所示。
如果用户按下 Print Screen 键,他/她将无法捕获任何图像,因为剪贴板包含一条文本消息,内容为“无打印数据”。因此,如果您想在操作系统中复制文本或文件,请不要忘记关闭此页面。
我们使用 setInterval
每 300 毫秒调用此函数 (AccessClipboardData
),以清除剪贴板中的任何对象。
setInterval("AccessClipboardData()", 300);
但是,此解决方案并不完整,因为 Internet Explorer 会询问用户是否允许此页面访问剪贴板。因此,如果用户不允许页面访问剪贴板,我们必须编写代码来处理此选项。
在 setInterval
函数之后添加此代码
setInterval("AccessClipboardData()", 300);
var ClipBoardText = "";
if (window.clipboardData) {
ClipBoardText = window.clipboardData.getData('text');
if (ClipBoardText != "No print data") {
alert('Sorry you have to allow the page to access clipboard');
// hide the div which contains your data
document.all("divmaster").style.display = "none"
}
在前面的代码中,我们声明了一个 clipboardtext
变量来获取剪贴板文本,并检查用户是否允许页面访问剪贴板。
第二步是避免使用键盘
要解决此问题,您必须捕获所有事件并取消它们,并在复制数据(通过 CTRL+C)或选择所有数据(通过 CTRL+A)的情况下弹出消息。
document.onkeydown = function(ev) {
var a;
ev = window.event;
if (typeof ev == "undefined") {
alert("PLEASE DON'T USE KEYBORD");
}
a = ev.keyCode;
alert("PLEASE DON'T USE KEYBORD");
return false;
}
document.onkeyup = function(ev) {
var charCode;
if (typeof ev == "undefined") {
ev = window.event;
alert("PLEASE DON'T USE KEYBORD");
} else {
alert("PLEASE DON'T USE KEYBORD");
}
return false;
}
第三步是避免使用打印页面
要解决此问题,您必须使用 CSS(层叠样式表)来隐藏打印中的数据
<style type="text/css" media="print">
.noprint {
display: none;
}
</style>
最后,我们希望避免数据出现在 HTML 源代码中,因此我们将使用更新面板,如果您的数据位于 page_load
事件中,则通过计时器控件延迟显示数据。
历史
- 2009 年 6 月 18 日:初始发布