zoukankan      html  css  js  c++  java
  • 禁止右键访问破解与攻防

    要禁止访问者查看网页源代码,我们首先要了解一下查看源代码的方式(以IE 5.0为例)。一是右键菜单方式; 二是窗口菜单栏查看方式,即选择"查看"*"源文件"方式。要彻底禁止访问者查看网页源代码,就必须屏蔽这2种查看源代码的方式。

    屏蔽右键菜单查看方式

    现在,很多网页采用如下代码屏蔽右键菜单:

    < Script Language=javascript>
    function Click(){
    if(event.button==2){alert
    ('版权所有(C)abandonship');
    }}
    document.onmousedown=Click;
    < /Script>

    实际上"button"有8个属性值(即0~7),"button==2"只是表示 按下鼠标右键,所以上述代码实际上只能限制点击鼠标右键的情况,至于其他5种方式,如同时按左右键、中间键、左和中间键、右和中间键和按所有键的情况就不 能限制了。所以在弹出版权信息提示窗口后(如图3所示),按"确定"按钮仍然会出现快捷菜单。针对这种情况,其实只要 将"event.button==2"改为"event.button!=1"就可以做到无论用何种鼠标点击方式,均不出现右键菜单了。

    不过即使进行上述修改 后,也并不能彻底禁止右键菜单的出现。用户只要在页面上按下右键,出现版权信息提示窗口后,不松开右键(即继续保持按下状态),再将鼠标指针移动到版权信 息提示窗口的"确定"按钮上,同时按下左键,然后再松开鼠标左键,提示窗口即消失。此时再松开鼠标右键,右键菜单弹出,这样就又可以查看网页源文件了。

    那么有没有办法彻底禁止右键快捷菜单的出现呢?其实只要将上述代码做如下修改即可。

    < Script Language=javascript>
    function Click(){
    alert('版权所有(C)abandonship');
    window.event.returnValue=false;
    }
    document.oncontextmenu=Click;
    < /Script>

    这样无论采取什么方式点击鼠标,都不会再出现快捷菜单了。不过值得注意的是,如果访问者直接在浏览器地址栏中键 入"javascript:alert(document.oncontextmenu='')",就可以解除对右键菜单的屏蔽。对这类访问者怎样防范 呢?其实,把地址栏隐藏掉就可以了,具体方法见本文介绍的"屏蔽窗口菜单栏查看方式"。

    屏蔽窗口菜单栏查看方式

    制作过网页的朋友都知道,对新打开窗口的各种属性可以进行控制,具体包括控制菜单栏、滚动条及地址栏是否可见等。如果把父窗口关闭,并将新打开窗口的菜单栏和地址栏隐藏,不就可以屏蔽窗口菜单栏查看方式了吗?实现代码如下:

    < Head>
    < Object id=closes type="application/x-oleobject"
    classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
    < Param name="Command" value="Close">
    < /Object>
    < /Head>
    < Body>
    < Script Language=javascript>
    closes.Click()
    window.open("XXX.htm","","menubar=no,location=no,
    scrollbars=yes,resizable=yes")
    < /Script>
    < /Body>

    这种方法的原理就是首先将自己网站的首页制作成index.htm形式,把首页设计成一个过渡页。然后将自己的真正主页制作成 default.htm形式(具体实现过程见本文所附源代码)。这样访问者无论如何也无法查看网页源代码了。这不仅仅保护了您的版权,也为进一步开发提供 了保障。通过此方法,您可以结合Cookie技术,真正做到限制用户浏览网页,从而避免主页资料被非法访问者访问。

    附:源代码清单
    index.htm
    < Head>
    < Object id=closes type="application/x-oleobject" classid="clsid:
    adb880a6-d8ff-11cf-9377-00aa003b7a11">
    < Param name="Command" value="Close">
    < /Object>
    < /Head>
    < Body>
    < Script Language=javascript>
    closes.Click()
    window.open("defalut.htm","","menubar=no,location=no,
    scrollbars=yes,resizable=yes")
    < /Script>
    < /Body>
    default.htm
    < Html>
    < Head>
    < Script Language=javascript>
    function Click(){
    alert('版权所有(C)abandonship');
    window.event.returnValue=false;
    }
    document.oncontextmenu=Click;
    < /Script>
    < /Head>
    < Body>
    ... ...
    < /Body>


    最佳方案
    <script language="JavaScript">
    <!--
    function key(){
    if(event.shiftKey){
    window.close();}
    //禁止shift
    if(event.altKey){
    window.close();}
    //禁止alt
    if(event.ctrlKey){
    window.close();}
    //禁止ctrl
    return false;}
    document.onkeydown=key;
    if (window.Event)
    document.captureEvents(Event.MOUSEUP);

    function nocontextmenu(){
    event.cancelBubble = true
    event.returnValue = false;
    return false;}
    function norightclick(e){
    if (window.Event){
    if (e.which == 2 || e.which == 3)
    return false;}
    else
    if (event.button == 2 || event.button == 3){
    event.cancelBubble = true
    event.returnValue = false;
    return false;}
    }
    //禁止右键,避免弹出窗口给予漏洞
    document.oncontextmenu = nocontextmenu;  // for IE5+
    document.onmousedown = norightclick;  // for all others
    //-->
    </script>
    <body onselectstart="return false"; onpaste="return false";><!--防止选择和粘贴-->
    选择字符试试abandonship
    <input size=30>

    <script language="JavaScript">
    <!--
    function key(){
    if(event.shiftKey){
    window.close();}
    //禁止shift
    if(event.altKey){
    window.close();}
    //禁止alt
    if(event.ctrlKey){
    window.close();}
    //禁止ctrl
    return false;}
    document.onkeydown=key;
    if (window.Event)
    document.captureEvents(Event.MOUSEUP);

    function nocontextmenu(){
    event.cancelBubble = true
    event.returnValue = false;
    return false;}
    function norightclick(e){
    if (window.Event){
    if (e.which == 2 || e.which == 3)
    return false;}
    else
    if (event.button == 2 || event.button == 3){
    event.cancelBubble = true
    event.returnValue = false;
    return false;}
    }
    //禁止右键,避免弹出窗口给予漏洞
    document.oncontextmenu = nocontextmenu;  // for IE5+
    document.onmousedown = norightclick;  // for all others
    //-->
    </script>
    <body onselectstart="return false"; onpaste="return false";><!--防止选择和粘贴-->
    选择字符试试abandonship
    <input size=30>

  • 相关阅读:
    虚函数与动态多态
    我读苏东坡
    Linux高性能服务器编程学习-第三章思维导图笔记
    Linux高性能服务器编程学习-第二章思维导图笔记
    Linux高性能服务器编程学习-第一章思维导图笔记
    【Knockout】五、创建自定义绑定
    【Knockout】三、data-bind声明式绑定
    【Knockout】四、绑定上下文
    【Knockout】一、认识Knockout,你会爱上它
    【Knockout】二、监控属性Observables
  • 原文地址:https://www.cnblogs.com/zhouwenwu/p/2657102.html
Copyright © 2011-2022 走看看