ISAPI筛选器及对ASP源文件的保护 2009-04-21 01:45:57

摘要:本文介绍了利用ISAPI筛选器保护ASP源文件的方法,并给出一个实例。
关键字   IIS,ISAPI,ASP,代码保护
1 引言
ASP作为一种网络开发的脚本语言,由于编程简单、功能强大,得到了广泛的应用。然而,由于ASP脚本是采用明文(plain text)方式来编写的,所以应用开发商辛苦开发出来的ASP应用程序,一旦发布到运行环境中去后,就很难确保这些"源代码"不会被流传出去。这样就产生 了如何有效地保护开发出来的ASP脚本源代码的需求。
对于ASP源代码保护的常用方法主要有两种:
(1)使用微软提供的官方加密程序加密。该程序可以从微软免费下载,安装后生成screnc.exe文件,这是一个运行在DOS PROMAPT的命令工具。使用该程序加密后,ASP脚本变成不可阅读的密文。加密后的ASP文件在IIS5.0下可直接运行,因而使用非常方便。但是, 在微软提供加密程序后很快就出现了解密程序,解密程序能完全恢复源代码,使加密形同虚设,不能说不是一种遗憾。
(2)使用ASP组件,即ASP文件中只编写尽可能少的源代码,将核心代码脚本部分被封装到一个COM/DCOM组件,并在ASP脚本中创建该 组件,进而调用相应的方法。因此,需要在开发ASP脚本应用之前就可按此思路来开发,或者直接用ASP 脚本快速开发出原型系统后,针对需要保护、加密的重要脚本用COM/DCOM组件来重新开发、实现并替换。但该方法给开发调试带来诸多不便,因此一般只对 最主要的代码采用这种方式。
鉴于上述两种方法的不足,本文研究了使用ISAPI的IIS筛选器的方法。该方法的基本思想是,开发过程中仍然使用按源代码方式进行,程序发布 前将脚本进行加密处理,程序发布后给IIS添加一个筛选器。利用筛选器与IIS的紧密结合特性,在ASP.DLL读取脚本前还原加密程序。其特点是,脚本 的开发与加密分离,加密方式可以自行决定,筛选器只能起到还原密文的功能。
2  ISAPI 筛选器的构成
ISAPI筛选器是微软针对IIS提供的专用API,提供了对IIS 的纵向扩充功能。ISAPI筛选器和HTTP 服务器运行在同一地址空间,并且可以访问可由 HTTP 服务器使用的所有资源。ISAPI筛选器随IIS启动而加载,客户机的每个HTTP请求都会导致筛选器执行,并且IIS处理HTTP请求的各个阶段都会产 生一个通知,从而调用筛选器处理相应事件。
 
ISAPI筛选器
IIS服务器
处理连接请求标题
处理连接请求数据
将URL映射成物理路径
授权用户(如果需要)
组织数据
写入日志
结束连接
OnReadRawData
OnPreprocHeaders
OnUrlMap
OnAuthentication
OnSendRawData
OnEndOfNetSession
发送给客户机
OnLog

图1显示了IIS服务器从接收到客户机请求数据到结束连接整个过程中IIS的处理步骤,以及筛选器可以获得的通知和处理方式。

 
图1 IIS服务器与筛选器工作流程
使用 MFC 的 CHttpFilter 类创建筛选器来管理 ISAPI 服务器的传入和输出数据时,使用两个入口点成员函数 CHttpFilter::GetFilterVersion 和 CHttpFilter::HttpFilterProc 。
⑴ GetFilterVersion
当IIS启动时,它读取该值并加载筛选器。然后它调用 CHttpFilter::GetFilterVersion
交换版本信息、确定请求的事件及指定传递请求事件的优先级。本文用到两个确定请求的事件,即SF_NOTIFY_URL_MAP和
SF_NOTIFY_SEND_RAW_DATA,用于将逻辑 URL
映射到物理路径时获得加密文件和将原始数据从服务器发送到客户端之前通知筛选器以删除解密文件
⑵ HttpFilterProc
当事件发生时,服务器通过调用筛选器的 HttpFilterProc 入口点通知筛选器。当
CHttpFilter::HttpFilterProc 被调用时,接收到的通知将确定将要调用哪一个 CHttpFilter 成员函数。通过重写
HttpFilterProc 成员函数时,可以使筛选器以特定的方式处理数据。本文涉及两个成员函数。
OnUrlMap   在服务器将逻辑 URL 映射到物理路径时通知筛选器执行。
OnSendRawData   在将原始数据从服务器发送到客户端之前通知筛选器执行。
3 实现ASP源代码保护过程
ASP的开发调试完成后可以通过自行设计的加密方法进行加密,通过加密变为密文文件。客户机访问密文文件时,首先通过IIS筛选器解密还原为
ASP源代码,然后再将ASP源代码交给ASP解释器解释执行,该过程在服务器将逻辑 URL
映射到物理路径时完成,即重写HttpFilterProc的成员函数OnUrlMap。处理方法如下:
筛选器得到通知后,判断是否ASP请求,决定是否对文件处理
    CString isasp,ext;
         isasp=pMapInfo->pszPhysicalPath;  //获得密文位置
    ext=isasp.Right(3);        ext.MakeUpper() ;
         if(!(ext=="ASP")) return SF_STATUS_REQ_NEXT_NOTIFICATION;
打开获得请求的asp密文文件
         CFile File_i;
         if(!File_i.Open(pstrPhysPath,CFile::modeRead))
{ return  SF_STATUS_REQ_FINISHED;       }
         num=File_i.GetLength();
         num=File_i.Read(str,num);
         File_i.Close();
对密文文件解密
         decrypt(str) ;   //调用解密函数
将解密后的源码保存在一临时文件中,文件名随机生成,可以存放在系统临时目录下。
         CFile File_o;
    if(!File_o.Open(pt,CFile::modeReadWrite |CFile::modeCreate))
    {  return  SF_STATUS_REQ_FINISHED; }
         File_o.Write( str, num );
        File_o.Close();
修改映射的物理路径为解密后的临时文件
         int n1,n2;
         n1=pt.GetLength(); //pt—解密文件路径
    n2=pMapInfo->cbPathBuff;
    for(int i=0;i<n1;i++)
         { pstrPhysPath[i]=pt[i]; }
         for(int j=n1;j<n2;j++)
         {  pstrPhysPath[j]='\0';}
为了不在磁盘留下解密文件,临时文件应及时删除,删除文件操作可通过重写HttpFilterProc的成员函数OnSendRawData来完成,该函数在系统将处理完数据的数据发送至客户机前被调用,因此,临时文件可以及时被删除。
4 结论
    由于ASP程序的开发与加密分离后,ASP源文件的保护措施不会影响ASP程序的开发,解密是在IIS筛选器中进行的,因此也不需要在加密文件时对源文件做任何特殊处理,该方法简单易行,更适合于对现有系统的加密保护。

ISAPI筛选器及对ASP源文件的保护的更多相关文章

  1. 调用 GetProcAddress 失败,在 ISAPI 筛选器 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" 上

    1.选择网站的ISAPI筛选器,设置ASP.NET的 aspnet_filter.dll右键恢复为父项 如果问题还未解决,执行第2步: 2.是否注册了asp.net,打开cmd运行:C:\Window ...

  2. WEB服务器5--IIS中ISAPI扩展、ISAPI筛选器

    在IIS的文档中经常会提到两个术语:ISAPI扩展和ISAPI筛选器. ISAPI扩展 “ISAPI扩展(ISAPI Extension)”是一种可以添加到IIS中以增强Web服务器功能的程序,其载体 ...

  3. [已解决]:调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "c:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.

    现象:我的是 win7, iis7, 64bit, 打开网站错误如下: 错误摘要 HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ...

  4. 事件日志:无法加载站点/服务的所有 ISAPI 筛选器。因此启动中止。

    事件日志:无法加载站点/服务的所有 ISAPI 筛选器.因此启动中止. Service Unavailable解决 故障状态:Internet 信息服务(IIS)管理器 里 应用程序池出现错误 “应用 ...

  5. 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "C:\Program Files\php\php5isapi.dll"

    把 ISAPI 筛选器这里的php配置删掉,php改用fastcgi配置

  6. 无法加载ISAPI 筛选器 当前配置只支持加载为 AMD64 处理器体系结构创建的映像

    无法加载ISAPI 筛选器 当前配置只支持加载为 AMD64 处理器体系结构创建的映像 2011-11-9 0:18:49来源:本站原创作者:清晨320我要评论(0) 今天服务器的伪静态死活加载不上去 ...

  7. 在IIS7.5打开网页的时候,提示: HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll" 上。解决方法

  8. 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll" 上

    开始 -> 运行 -> inetmgr -> 应用程序池 -> 找到 我的网站对象的 程序池 -> 右键 -> 高级设置 -> 启用32位应用程序 由 fal ...

  9. ASP.NET Web API 安全筛选器

    原文:https://msdn.microsoft.com/zh-cn/magazine/dn781361.aspx 身份验证和授权是应用程序安全的基础.身份验证通过验证提供的凭据来确定用户身份,而授 ...

随机推荐

  1. MySQL数据库(2)

    上一篇我们讲述过MySQL创建数据库,数据表的内容,其中涉及到了几个约束: NOT NULL   非空约束 PRIMARY KEY   主键约束 UNIQUE KEY    唯一约束 其实还有两个约束 ...

  2. 集合框架之map

    Map实现类用于保存具有映射关系的数据.Map保存的每项数据都是key-value对,也就是由key和value两个值组成.Map里的key是不可重复的,key用户标识集合里的每项数据. Map提供了 ...

  3. md 常用语法

    序言: 起因: 因为现在的前端基本上都用上了前端构建工具,那就难免要写一些readme等等的说明性文件,但是这样的文件一般都是.md的文件,编写的语法自然跟其他格式的文件有所区别,置于为什么要用这种格 ...

  4. 使用eclipse新建一个c项目

    一.打开eclipse并新建项目 1.快捷键:字体放大:Ctrl+Shift+“+” 字体缩小:Ctrl+“-”  

  5. 使用node.js & live server在移动端测试网站

    1.安装node.js 下载Node.js官网 cmd下确认node已安装 node -v ※进入node环境 2.确认npm已安装(Node.js的包管理工具(package manager)) n ...

  6. java 对小数位的处理 BigDecimal DecimalFormat 常用操作 浅解

    [博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708] htt ...

  7. spark中map与mapPartitions区别

    在spark中,map与mapPartitions两个函数都是比较常用,这里使用代码来解释一下两者区别 import org.apache.spark.{SparkConf, SparkContext ...

  8. install openjdk & tomcat on the centos

    1.检查当前服务器是否已安装openjdk

  9. windows分驱

    步骤/方法   1 鼠标右击“计算机” 2 选择“管理”标签 3 打开“计算机管理”窗口   选择“磁盘“>>”存储管理“,打开”磁盘管理“页面 如图:   右键单击选择要压缩的磁盘(本例 ...

  10. (2018 Multi-University Training Contest 3)Problem L. Visual Cube

      //题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6330//题目大意:按照一定格式画出一个 a×b×c 的长方体.  #include <b ...