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. ZedBoard前期准备工作

    1. 资源下载 内核:https://github.com/Xilinx/linux-xlnx/releases uboot:https://github.com/Xilinx/u-boot-xlnx ...

  2. react 的基础

    首先下载React 的安装包,可以到官网下载.也可以使用React Demos 已经自带 React 源码,不用另外安装,只需把这个库拷贝到硬盘中使用. (可参考http://www.ruanyife ...

  3. 创建nodejs服务

    1.终端窗口输入:npm init 2.终端输入:npm install 3.修改代码后重启服务:ctrl+c 启动服务:node 文件名.js

  4. 使用本机IP调试web项目

    1.查看本机IP 使用命令行查看本机ip地址: cmd 进入命令行  Ipconfig 查询本机ip. 2.找到启动项目的配置文件  启动IIS查找配置文件的位置 点击显示所有应用程序   3.修改项 ...

  5. CentOS 7 常用命令大全

    CentOS7 常用命令集合 这两天一直在对CentOS 7.2进行初体验,各种学习命令肿么用,不过其实大多和DOS是一样的,只是命令的表达上可能有点儿不一样,毕竟这些都不是一家出来的嘛~ 废话不多说 ...

  6. myBatis简学

    mybatis使用: ①拷贝相关mybits ②编写对象关系映射,一般都是实体类名+Mapper.xml的格式 ③编写mybits配置文件: a)配置环境 b)配置映射文件地址 ④编写对象操作方法: ...

  7. mysql Navicat客户端

    Navicat是一个用来操作多种数据库的客户端. 可应用操作系统:Windows.macOS.Linux. 可应用 Navicat 产品:Navicat for MySQL.Navicat for P ...

  8. .NET快速开发平台免费版预发布

    自己团队开发的一套软件,可通过配置完成列表.表单.流程等的快速开发,因项目原因有一段时间没更新了,准备发出来希望能帮助更多企业快速实现信息化. 该软件主要应用的技术有如下: 1.存储:采用SqlSer ...

  9. VM虚拟机拍摄快照时出错或者克隆失败解决办法

    在换了固态硬盘后,下载好VM,装虚拟机,结果克隆虚拟机和拍摄快照时出问题了. 拍摄快照时出错或者隆失败出现参数错误如图: 所提供的参数中有一个无效参数 解决办法 出现这个问题一般是在机械硬盘的电脑上面 ...

  10. 在eclispe上git 代码滚回

    1.项目 - 鼠标右键 - team - show in history: 2.history窗口 - 选择需要回滚到的版本 - reset - hard:3.项目 - 鼠标右键 - team - p ...