我有一个比较好的方法,大家看看是否可以:
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)
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)
解决方案 »
- 说说各自开发中常用的jquery插件
- membership
- 怎样获取objectdatasource select()后的dataset啊?
- RSS、Web Service、xml问题,有一定难度!!
- 我到底该用DataReader还是DataSet?
- 数据库里时间类型的问题
- DataReader 怎样获取随机数据
- 我想自学ASP.NET,各位大大们推荐几本书给我吧!
- 高分请教--服务器端代码是写在aspx文件中好,还是写在aspx.vb中好一些?
- 菜鸟大送分.....网站的根目录怎么表示???
- asp.net 读取word 文档
- 请问下FormsAuthentication是怎么用的, 是不是要加什么命名空间, 我在visual studio上打不出来
也不能避免被下载的,光是vs2003/2005/2008调试,就能揪出你的js来,我还不说其它的工具了
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=" "+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";
}
但是BS下,只要能看得见的就能够下载下来!
再说,JS只有下载到客户端才能被执行。如果实在不想JS被客户直接下载,那就将JS加密,不过这个也不能彻底解决问题。
<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> 来执行;
2 这个是根本不需要也没有必要阻止的,你吃饱撑的阻止这个干吗? 这跟阻止别人看你网站上的图标没有本质区别。
上面说的掩耳盗铃这个词,非常到位~~~ js只能混淆不能阻止下载的,而且混淆也就是骗骗和你这样不了解原理的,遇到个知道的,把你解混淆的那个函数拿来执行一下就出来了,你总是需要一个那样的函数,也必须让那个函数到达客户端,任何混淆都只是把eval 改成 document.write就可以知道你原来的代码,你混淆几次就解几次~~~~
改后缀名没有意义,因为就算你是需要服务器处理的,但是总是需要处理输出(不然这句代码就等于没作用),把你的输出字符串获取到就OK了。
如果你要加大下载难度, 可以这么做:
1 先修改http协议头,使浏览器不对该js的内容进行硬盘缓存(但是还是会在内存中缓冲一份用于执行的)
2 用类似防盗链那样的httphandler来对js进行处理,并且把js放在另外一个域名下面,用引用地址来辨别合法的浏览器浏览。靠js文件和该站点的不同域名和防盗链来阻止大部分下载工具的下载行为。那样别人用下载工具也许就下载不来(因为很多下载工具是以目标文件作为http上下文的,而不是当前连接的站点),而正常的浏览器浏览,主流浏览器都会在http请求的头里面携带当前的浏览器状态信息,这些状态信息可以让你的httphandler把浏览器和下载工具区分开来,也可以把直接输入js地址请求文件的下载行为区分出来,但是依然无法阻止下载,只是使下载复杂了而已。 对知道你原理的人,自己简单写几行代码实例化一个请求对象并手工把请求地址和引用地址赋值为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> 来执行;
]
我的思路和这个老兄的想法有点象~我的脚本地址为:
<script src="http://www.crossgo.com/ClientCall.aspx?temp=0.196879997941144&path=script*MainCallBack&type=config"></script> 其实就是在服务器端随机生成非缓存的客户端脚本内容,因为根本没有生成JS文件,所以理论上是不可能下载的,采用某些特殊方法也许可以下载下来,希望有朋友能找到方法哦.问题出发点:一般的JS脚本被下载下来是无所谓的,去做这件事情也确实很无聊的,如果部分处理逻辑在客户端完成,特别是回调脚本,这时候最好能控制JS下载了.