在ASP.NET页面中,我们编写JavaScript脚本附加有注释时,这些注释也往往会随JavaScript脚本一起送到客户端。访问者只要在浏览器里查看HTML源文件就可以看到这些注释。
当然,我们可以选择放弃使用注释。然而,有些JavaScript代码又是必须有注释的。比如有些代码故意写得很乱,以用来迷惑恶意攻击者。如果没有注释,恐怕也把自己给迷惑进去了,但加了注释,岂不又给了攻击者一个指路标。
有没有办法让JavaScript的注释在客户端不可见呢?
答案很简单,就是:JavaScript注释 + 服务器端注释!
行注释写法:
//<%-- 这里写行注释 --%>
块注释写法:
/*<%--
这里写注释语句块,
多行都行。
--%>*/
我们自己的开发人员可以阅读到完整的注释,而编译后的ASP.NET页面将忽略掉<%--到--%>中的注释部分,恶意攻击者在客户端就看不到这些注释了。
他只能看到:// 或者 /**/ 然后,然后立马晕倒!
您可能已经早知道这一诀窍,不过俺是自己想到的。菜鸟并非总吃素,偶尔啄到小虫子。
原著:李战(leadzen).深圳 2008-4-22
原文:http://www.cnblogs.com/leadzen/archive/2008/04/22/1163894.html
刚刚在首页看到李老师的[为JavaScript程序添加客户端不可见的注释],突然想起很久前想过在客户端隐藏脚本的一个方法.在这里给大家一个思路吧.
不过如果想要在已有的项目中使用这个方法,可能要修改你现有的js代码了.
原理其实也很简单,不在页面中写js代码,而是把js代码写在一个单独的文件中,然后在客户端用xmlhttp[这里还是要用到js代码]来请求这个js代码文件,到客户端再用eval执行一次就OK了.
Demo.htm代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>K2046,让浏览者看不见你的脚本.</title>
<script language="javascript" type="text/javascript">
function GetScript()
{
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("post", "http://Robot/Javascript.aspx", false);//用get的话ie会把文件保存到缓存里,post就不会了.
xmlhttp.send();
eval(xmlhttp.responseText);
}
window.onload = GetScript;
</script>
当然,我们可以选择放弃使用注释。然而,有些JavaScript代码又是必须有注释的。比如有些代码故意写得很乱,以用来迷惑恶意攻击者。如果没有注释,恐怕也把自己给迷惑进去了,但加了注释,岂不又给了攻击者一个指路标。
有没有办法让JavaScript的注释在客户端不可见呢?
答案很简单,就是:JavaScript注释 + 服务器端注释!
行注释写法:
//<%-- 这里写行注释 --%>
块注释写法:
/*<%--
这里写注释语句块,
多行都行。
--%>*/
我们自己的开发人员可以阅读到完整的注释,而编译后的ASP.NET页面将忽略掉<%--到--%>中的注释部分,恶意攻击者在客户端就看不到这些注释了。
他只能看到:// 或者 /**/ 然后,然后立马晕倒!
您可能已经早知道这一诀窍,不过俺是自己想到的。菜鸟并非总吃素,偶尔啄到小虫子。
原著:李战(leadzen).深圳 2008-4-22
原文:http://www.cnblogs.com/leadzen/archive/2008/04/22/1163894.html
刚刚在首页看到李老师的[为JavaScript程序添加客户端不可见的注释],突然想起很久前想过在客户端隐藏脚本的一个方法.在这里给大家一个思路吧.
不过如果想要在已有的项目中使用这个方法,可能要修改你现有的js代码了.
原理其实也很简单,不在页面中写js代码,而是把js代码写在一个单独的文件中,然后在客户端用xmlhttp[这里还是要用到js代码]来请求这个js代码文件,到客户端再用eval执行一次就OK了.
Demo.htm代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>K2046,让浏览者看不见你的脚本.</title>
<script language="javascript" type="text/javascript">
function GetScript()
{
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("post", "http://Robot/Javascript.aspx", false);//用get的话ie会把文件保存到缓存里,post就不会了.
xmlhttp.send();
eval(xmlhttp.responseText);
}
window.onload = GetScript;
</script>
</head>
<body>
<input type="button" onclick="SayHello()" value="Hello" />
</body>
</html>
javascript.aspx文件代码:
window.SayHello = function()
{
alert("Hello,Robot!");
}
当然,你也可以在javascript.aspx.cs中加上一些验证,比如检查urlreferrer等,如果urlreferrer不符合要求就Response.End();
其实也可以不用aspx来放js代码,用htm也可以,只是缓存里会出现htm的文件,而且也不能用post方法而已.
不过这也不能保证js绝对的隐藏起来了,用抓包工具好像还是一样可以看到response的数据.呵呵.
浙公网安备 33010602011771号