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>

  • 相关阅读:
    布局重用 include merge ViewStub
    AS 常用插件 MD
    AS 2.0新功能 Instant Run
    AS .ignore插件 忽略文件
    AS Gradle构建工具与Android plugin插件【大全】
    如何开通www国际域名个人网站
    倒计时实现方案总结 Timer Handler
    AS 进行单元测试
    RxJava 设计理念 观察者模式 Observable lambdas MD
    retrofit okhttp RxJava bk Gson Lambda 综合示例【配置】
  • 原文地址:https://www.cnblogs.com/zhouwenwu/p/2657102.html
Copyright © 2011-2022 走看看