首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何防止js文件被下载:我的解决方法欢迎讨论 [已结贴,结贴人:bookshop]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bookshop
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-02-05 10:31:32 楼主
    我有一个比较好的方法,大家看看是否可以:
    1)
    script的标记采用后台注册,例如:
    Page.RegisterclientScript(this.gettype(),"sss"," <script src='./scriptCall.aspx?path=xxx.config'> </script>",false)
    PS:xxx.config是无法下载的

    2)scriptCall.aspx中采取streamreader读取contexttype="text/plain"的输入流,并判断来源地址(refer)

    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hdt
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-05 10:33:531楼 得分:1
    无法根本解决,因为js时要被下载到客户端才会被执行,除非你不想让他执行,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Snowdust
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-05 10:35:362楼 得分:1
    把文件后缀名改成aspx或者asp不就没法下载了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bookshop
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-05 10:40:553楼 得分:0
    哈哈,我的方法应该可以的

    有兴趣的可以挑战下:把我在www.crossgo.com上的回调脚本下载下来试试?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • haolaiwu
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-05 16:03:354楼 得分:2
    你的方法根本太容易下载了,这个问题是没有办法的,你光是改一个文件扩展名或者判断来源地址?
    也不能避免被下载的,光是vs2003/2005/2008调试,就能揪出你的js来,我还不说其它的工具了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • LikeCode
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-05 16:19:435楼 得分:2
    这个是不是?!
    JScript code
    function setMyHome() { event.srcElement.style.behavior='url(#default#homepage)'; event.srcElement.sethomepage('http://www.crossgo.com'); } function addFavor() { if (document.all) { window.external.addFavorite('http://www.crossgo.com','聚度网络'); } else if (window.sidebar) { window.sidebar.addPanel('聚度网络', 'http://www.crossgo.com', ""); } } function killerror(){return true;} //window.onerror =killerror; //得到绝对位置 function getActPos(e,typ) { var t=e.offsetTop; var l=e.offsetLeft; while(e=e.offsetParent) { t+=e.offsetTop; l+=e.offsetLeft; } if(typ=='left') return l; else if(typ=='top') return t; } function doSndMsg() { window.open('UIDUsrSndMsg.aspx'); } function doCGSearch() { if(document.all.keyWrd.value!="") { var s=document.all.keyWrd.value; s=s.replace(/(^\s*)|(\s*$)/g, "") var s="./cg/default.aspx?kd="+s; window.open(s,"CGSearch"); } } function showSpcCat(strTabType,flgCss) { strTabType=escape(strTabType); var tblRow=document.all.tblTab.rows[0]; for(var i=0;i<=tblRow.cells.length-1;i++) { tblRow.cells[i].childNodes[0].className="s2"; } if(flgCss==null)//有时候需要改 { event.srcElement.className="s1"; } if(strTabType=="a")//全部 strTabType=""; else strTabType="?cat="+strTabType; document.location="default.aspx"+strTabType; } function showRegister(strType,admFlg) { if(admFlg=='U'&&window.confirm('已经注册了我的聚度号?')) { window.open('tools/UIDpUsrSelfAdm.aspx?type='+admFlg,'admU'); return; } else if(admFlg=='S'&&window.confirm('已经注册我的网站?')) { window.open('tools/UIDpUsrSelfAdm.aspx?type='+admFlg,'admS'); return; } else { if(strType=="U")strType=""; window.open("doc/readme"+strType+".htm"); } } function init() { document.all.keyWrd.focus(); } var srcCGTool; function ShowSpcDiv(strTyp) { srcCGTool=event.srcElement; var t=getActPos(event.srcElement,"top")+15; if(strTyp=="S") { document.all.divSuppScore.style.left=20; document.all.divSuppScore.style.top=t; document.all.divSuppScore.style.display="block"; document.all.divAgaScore.style.display="none"; } else if(strTyp=="A") { document.all.divAgaScore.style.left=20; document.all.divAgaScore.style.top=t; document.all.divAgaScore.style.display="block"; document.all.divSuppScore.style.display="none"; } } function ShowScoreHint() { var lstTd=event.srcElement.parentNode.childNodes(event.srcElement.parentNode.childNodes.length-1) lstTd.innerHTML="&nbsp;"+event.srcElement.getAttribute("value")+""; } function ShowComment(sCGID) { alert(sCGID); } function doSavClkCnt(strType,strKeyID) { document.all.divInputPass.style.display="none"; doCallTheServer(strType+strSplit+strKeyID); } function doShowLevelInf(strKeyID) { document.all.divInputPass.setAttribute("cgid",event.srcElement.getAttribute('cgid')); document.all.divInputPass.setAttribute("uid",strKeyID); document.all.divInputPass.setAttribute("dst",event.srcElement.getAttribute('dst')); var l=getActPos(event.srcElement,"left"); document.all.divInputPass.style.left=l+200; var t=getActPos(event.srcElement,"top"); document.all.divInputPass.style.top=t; document.all.divInputPass.style.display="block"; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • changjiangzhibin
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-05 18:15:276楼 得分:1
    路过
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fcuandy
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-05 19:28:077楼 得分:1
    掩耳盗铃.

    先不说具体的实现,就说你只要弄明白了b/s原理,就不会发这样的贴子.

    除了无语,还只能是无语.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • only_endure
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-05 19:46:598楼 得分:1
    纯接分来了.顺便恭喜楼主,贺喜楼主,新年快到了...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vicqqq
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-05 22:02:409楼 得分:1
    掩耳盗铃
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wf5360308
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-06 15:41:3110楼 得分:1
    想法是好的。
    但是BS下,只要能看得见的就能够下载下来!
    再说,JS只有下载到客户端才能被执行。如果实在不想JS被客户直接下载,那就将JS加密,不过这个也不能彻底解决问题。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • huangbo162522
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-06 20:07:1711楼 得分:1
    楼主你理解了BS结构没。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hackhu
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-08 22:15:3212楼 得分:1
    加密吧。在JS的书上有写到这个的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yoursWTR
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-09 06:41:2013楼 得分:2
    引用CS文件比如
    <script type="text/javascript" src="Default.aspx"> </script>
    在Default.aspx的cs里面写JS比如
            protected void Page_Load(object sender, EventArgs e)
            {
                Response.Write("function a()");
                Response.Write("{");
                Response.Write("alert('这个想法真无聊');");
                Response.Write("}");
            }
    在页面就可以使用 <script type="text/javascript">a(); </script> 来执行;

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • long171
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-09 13:12:2614楼 得分:1
    混淆吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangnan521
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-09 15:08:1215楼 得分:1
    JS是在客户端执行,不可能不让人下载 不下载就以为着客户端也不能执行,那就失去了JS存在的意义
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • syeerzy
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-09 17:03:1416楼 得分:2
    你的办法看都不需要看,看你的题目就知道接触B/S没几天或者根本不明白工作原理的~~~~

    1  这个是根本不能阻止的,客户端脚本必须到客户端执行,不管你用任何手段加了什么花样。
    2  这个是根本不需要也没有必要阻止的,你吃饱撑的阻止这个干吗? 这跟阻止别人看你网站上的图标没有本质区别。


    上面说的掩耳盗铃这个词,非常到位~~~  js只能混淆不能阻止下载的,而且混淆也就是骗骗和你这样不了解原理的,遇到个知道的,把你解混淆的那个函数拿来执行一下就出来了,你总是需要一个那样的函数,也必须让那个函数到达客户端,任何混淆都只是把eval 改成 document.write就可以知道你原来的代码,你混淆几次就解几次~~~~ 


    改后缀名没有意义,因为就算你是需要服务器处理的,但是总是需要处理输出(不然这句代码就等于没作用),把你的输出字符串获取到就OK了。


    如果你要加大下载难度, 可以这么做:
    1 先修改http协议头,使浏览器不对该js的内容进行硬盘缓存(但是还是会在内存中缓冲一份用于执行的)
    2 用类似防盗链那样的httphandler来对js进行处理,并且把js放在另外一个域名下面,用引用地址来辨别合法的浏览器浏览。靠js文件和该站点的不同域名和防盗链来阻止大部分下载工具的下载行为。

    那样别人用下载工具也许就下载不来(因为很多下载工具是以目标文件作为http上下文的,而不是当前连接的站点),而正常的浏览器浏览,主流浏览器都会在http请求的头里面携带当前的浏览器状态信息,这些状态信息可以让你的httphandler把浏览器和下载工具区分开来,也可以把直接输入js地址请求文件的下载行为区分出来,但是依然无法阻止下载,只是使下载复杂了而已。 对知道你原理的人,自己简单写几行代码实例化一个请求对象并手工把请求地址和引用地址赋值为2个对应的不同的值就可以下载下来了。

    我的方法是否比你的方法好得多(也复杂得多)??? 不过依然是阻止不了下载的,因为本质上,这个问题是无解的,如果你知道工作原理的话,你只能让对方变难少许而不能阻止


    楼主的天真想法是很好的~~~~~不过是实现不了的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bookshop
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-12 10:19:1217楼 得分:0
    注:上述的这个脚本我本省就没有用上述方法处理,我的回调脚本是config结尾的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bookshop
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-13 09:42:5218楼 得分:0
    [size=12px]新年好!!![/size]
    哈哈,首先非常感谢大家的讨论,上面这些所列出来的当然不是我的回调脚本~~~
    [
    引用CS文件比如
    <script  type="text/javascript"  src="Default.aspx"> </script> 
    在Default.aspx的cs里面写JS比如
                    protected  void  Page_Load(object  sender,  EventArgs  e)
                    {
                            Response.Write("function  a()");
                            Response.Write("{");
                            Response.Write("alert('这个想法真无聊');");
                            Response.Write("}");
                    }
    在页面就可以使用 <script  type="text/javascript"> a(); </script>  来执行;
    ]
    我的思路和这个老兄的想法有点象~


    我的脚本地址为:
    <script src="http://www.crossgo.com/ClientCall.aspx?temp=0.196879997941144&path=script*MainCallBack&type=config"> </script>

      其实就是在服务器端随机生成非缓存的客户端脚本内容,因为根本没有生成JS文件,所以理论上是不可能下载的,采用某些特殊方法也许可以下载下来,希望有朋友能找到方法哦.

    问题出发点:一般的JS脚本被下载下来是无所谓的,去做这件事情也确实很无聊的,如果部分处理逻辑在客户端完成,特别是回调脚本,这时候最好能控制JS下载了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yuwenge
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-13 10:32:4619楼 得分:1
    搞得这么复杂做什么?
    真的那么机密的东西,就让客户装插件不就完了。
    吃饱了撑的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wuxing2006
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-13 10:47:4420楼 得分:0
    毛病,你去IE临时目录去看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wuxing2006
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-13 10:48:2921楼 得分:0
    客户端脚本
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bookshop
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-13 10:49:3522楼 得分:0
    临时目录当然没有,你看到的那个js文件我就没有控制?用VS调试可以获得
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hsnd
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-30 14:12:3023楼 得分:0
    不错只有VS调试或FF可以获得
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • S314324153
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-09-03 16:43:1124楼 得分:0
    还不知道,在客户端怎么用vs调试服务器上才有的代码
    修改 删除 举报