/script >
< br >
< a href="index.asp" >reload< /a >
< /body >
< /html >
下面我们来分析一下index.asp。首先,程序把auth会话变量设置成了“true”,它表示请求.js文件的页面应该被信任。接下来的几个Response调用防止浏览器缓存index.asp页面。
一般地,在HTML文件中调用javascript源文件的语法如下:
< script language="javascript" src="yourscript.js" >< /script >
但在本例中,我们调用的却是一个ASP页面而不是javascript源文件:
< script language="javascript" type="text/javascript" SRC="js.asp" >< /script >
如果要遮掩应用正在请求ASP页面这一事实,你可以把js.asp改名为index.asp(或者default.asp),然后把这个文件放到单独的目录之中,比如“/js/”,此时上面这行代码就改为:
< script language="javascript" type="text/javascript" SRC="/js/" >< /script >
这几乎能够迷惑任何企图获取javascript源文件的人了。不过,请不要忘记在IIS服务器配置中正确地设置默认页面文件的名字。
js.asp
< %
IF Session("auth") = True THEN
Response.ContentType = "application/x-javascript"
Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
Session("auth") = False
% >
function test(){
document.write('这是javascript函数的输出.');
}
< %ELSE% >
< !--这些代码受版权保护。所有权利保留-- >
< %END IF% >
下面我们来分析一下js.asp如何进行验证以及发送javascript代码。程序首先检查会话变量auth,看看请求的起源是否合法。如是,则关闭浏览器缓存,重新设置会话变量,然后向浏览器发送javascript代码。如果对js.asp的请求不是来自可靠的起源,会话变量auth是false,程序只发送一个带有版权声明的空白页面。
其结果是,如果用户企图下载javascript源文件或者在另一个网站上使用javascript源文件,他得到的只是一个空白页面。这样,我们也就实现了对谁可以访问DHTML源文件的控制。
如果要在Web页面中保护页面实际内容的HTML代码,你可以在js.asp文件中创建一个函数,如下所示:
function html(){
document.write('< html >< body >页面内容< \/body >< \/html > ');
}
然后,主页面只需简单地调用一下html()即可构造出Web页面。这种页面只有在用户启用了浏览器的javascript支持之后才会显示。如果用户查看这种页面的源代码,他看到的只有一个函数调用,而不会看到函数调用所返回的源代码。
这种表现出两种(或更多)不同类型文件特征的ASP可以称为“混合ASP”。下面是javascript/ASP混合文件的一些特点:
●javascript源文件直接发向浏览器,未经缓存。
●文件经过必要的验证,防止了用户下载源代码。
●最终用户不能直接访问源代码。
上面的代码已经在Windows 98、Windows NT平台的Personal Web Server以及IIS 4上进行了测试,在下列浏览器上代码均能流畅地运行:Netscape 4.7,Internet Explorer 5,Netscape 6以及Opera 5.0。
局限
和任何其他技术一样,本文所介绍的技术也有其固有的局限。
▲ 会话变量:
在上面的例子中,我们使用会话变量验证javascript源文件调用的起源。如果网站的访问量非常高,这可能不是进行验证的最好方法。
每次用户访问Web页面或Web应用时都要创建一个会话变量。服务器保持会话唯一标识符的默认时间是20分钟。如果服务器同时要为大量访问者维持状态信息,你可以想象出服务器的负载会有多高。
解决这个问题主要有两种方法:
●在服务器上把会话超时时间设置得尽量小。此外,当代码已经发送给浏览器之后,调用Session.Abandon释放会话状态信息。这种方法适用于中小流量的网站。
●对于高流量的网站,建议通过GUID/数据库结合维持会话状态的方法进行验证。
▲ 内存分配:
大多数基于Mozilla的浏览器都用Spidermonkey javascript引擎解释执行javascript。这个引擎的优点包括:以解释方式执行代码(与编译方式相对应),动态垃圾收集机制(换句话说,自动释放内存空间避免内存漏洞吞噬计算机资源)。
试试下面这个操作:运行上面的例子。函数执行
< br >
< a href="index.asp" >reload< /a >
< /body >
< /html >
下面我们来分析一下index.asp。首先,程序把auth会话变量设置成了“true”,它表示请求.js文件的页面应该被信任。接下来的几个Response调用防止浏览器缓存index.asp页面。
一般地,在HTML文件中调用javascript源文件的语法如下:
< script language="javascript" src="yourscript.js" >< /script >
但在本例中,我们调用的却是一个ASP页面而不是javascript源文件:
< script language="javascript" type="text/javascript" SRC="js.asp" >< /script >
如果要遮掩应用正在请求ASP页面这一事实,你可以把js.asp改名为index.asp(或者default.asp),然后把这个文件放到单独的目录之中,比如“/js/”,此时上面这行代码就改为:
< script language="javascript" type="text/javascript" SRC="/js/" >< /script >
这几乎能够迷惑任何企图获取javascript源文件的人了。不过,请不要忘记在IIS服务器配置中正确地设置默认页面文件的名字。
js.asp
< %
IF Session("auth") = True THEN
Response.ContentType = "application/x-javascript"
Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
Session("auth") = False
% >
function test(){
document.write('这是javascript函数的输出.');
}
< %ELSE% >
< !--这些代码受版权保护。所有权利保留-- >
< %END IF% >
下面我们来分析一下js.asp如何进行验证以及发送javascript代码。程序首先检查会话变量auth,看看请求的起源是否合法。如是,则关闭浏览器缓存,重新设置会话变量,然后向浏览器发送javascript代码。如果对js.asp的请求不是来自可靠的起源,会话变量auth是false,程序只发送一个带有版权声明的空白页面。
其结果是,如果用户企图下载javascript源文件或者在另一个网站上使用javascript源文件,他得到的只是一个空白页面。这样,我们也就实现了对谁可以访问DHTML源文件的控制。
如果要在Web页面中保护页面实际内容的HTML代码,你可以在js.asp文件中创建一个函数,如下所示:
function html(){
document.write('< html >< body >页面内容< \/body >< \/html > ');
}
然后,主页面只需简单地调用一下html()即可构造出Web页面。这种页面只有在用户启用了浏览器的javascript支持之后才会显示。如果用户查看这种页面的源代码,他看到的只有一个函数调用,而不会看到函数调用所返回的源代码。
这种表现出两种(或更多)不同类型文件特征的ASP可以称为“混合ASP”。下面是javascript/ASP混合文件的一些特点:
●javascript源文件直接发向浏览器,未经缓存。
●文件经过必要的验证,防止了用户下载源代码。
●最终用户不能直接访问源代码。
上面的代码已经在Windows 98、Windows NT平台的Personal Web Server以及IIS 4上进行了测试,在下列浏览器上代码均能流畅地运行:Netscape 4.7,Internet Explorer 5,Netscape 6以及Opera 5.0。
局限
和任何其他技术一样,本文所介绍的技术也有其固有的局限。
▲ 会话变量:
在上面的例子中,我们使用会话变量验证javascript源文件调用的起源。如果网站的访问量非常高,这可能不是进行验证的最好方法。
每次用户访问Web页面或Web应用时都要创建一个会话变量。服务器保持会话唯一标识符的默认时间是20分钟。如果服务器同时要为大量访问者维持状态信息,你可以想象出服务器的负载会有多高。
解决这个问题主要有两种方法:
●在服务器上把会话超时时间设置得尽量小。此外,当代码已经发送给浏览器之后,调用Session.Abandon释放会话状态信息。这种方法适用于中小流量的网站。
●对于高流量的网站,建议通过GUID/数据库结合维持会话状态的方法进行验证。
▲ 内存分配:
大多数基于Mozilla的浏览器都用Spidermonkey javascript引擎解释执行javascript。这个引擎的优点包括:以解释方式执行代码(与编译方式相对应),动态垃圾收集机制(换句话说,自动释放内存空间避免内存漏洞吞噬计算机资源)。
试试下面这个操作:运行上面的例子。函数执行
| 对此文章发表了评论 |
