65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.59/5 (10投票s)

2009 年 6 月 18 日

CPOL

2分钟阅读

viewsIcon

130903

downloadIcon

4230

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

引言

在本文中,我将解释如何在安全应用程序(例如在线考试系统或任何您想要保护的应用程序)中禁用 Print Screen 键或键盘。
有些人可以通过使用 Print Screen 键、获取 HTML 源代码甚至打印问题来窃取您的数据。

我们面临 4 个挑战,以创建考试或安全应用程序的页面:

  1. 禁用 Print Screen 键并清除任何剪贴板数据
  2. 避免使用键盘或鼠标
  3. 隐藏 HTML 源代码中的数据 
  4. 避免使用打印页面

第一步是避免使用 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 日:初始发布
© . All rights reserved.