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. kendo ui DatePicker 时区转换

    http://blog.darkthread.net/post-2013-06-25-json-date-timezone-issue.aspx

  2. STL 小白学习(8) set 二叉树

    #include <iostream> using namespace std; #include <set> void printSet(set<int> s) ...

  3. Python数据类型——字符串

    概论 字符串顾名思义就是一串字符,由于Python中没有“字符”这种数据类型,所以单个的字符也依然是字符串类型的.字符串可以包含一切数据,无论是能从键盘上找到的,还是你根本都不认识的.与数一样,字符串 ...

  4. lumion室内渲染二6.3

    地板材质不够好,点击地面材质,编辑材质把视察调到没有,让地砖的凹凸变小.调大光泽和反射率. 如果找不自己想要的材质可以自己做材质.在浏览器中搜索大理石瓷砖贴图,保存到桌面.放到PS裁剪.裁剪为正方形的 ...

  5. Html+css学习笔记二 标题

    学习新标签,标题 <html> <head> <title>tags</title> </head> <body> <h1 ...

  6. Promise 错误处理

    Promise 是一个异步返回单个结果的函数或方法 不使用  `catch()` 时,在  `success handler` 里的错误无法被捕捉到 使用  `catch()` 时,在  `succe ...

  7. pyCharm-激活码(2018)

    最近使用pycharm的时候,用的是很久以前的激活地址 于是网上到处寻找最新地址,然而 网上之前分享的激活地址已经多半过期, 于是找朋友帮忙,终于找到一个可用的了 1.选择 Activate new ...

  8. 面试题:电梯/雨伞/杯子/笔/A4纸/纸杯… 怎么测试?

    目的 面试的时候,面试官出题可能会出其不意: 比如随意指定生活当中的一件物品,问你如何测试,见下 作为测试人员,电梯/雨伞/杯子/笔/A4纸/纸杯… 怎么测试? 面试官的考察点 1.在没有需求文档或者 ...

  9. linux修改主机名+免密认证+关闭防火墙

    在很多软件安装的时候都有这些需求,因此在这里一起讲一下 修改主机名 简单的使用 hostnamectl 命令就好了 hostnamectl set-hostname NAME 免密认证 准备工作,修改 ...

  10. 第七次作业——numpy统计分布显示

    用np.random.normal()产生一个正态分布的随机数组,并显示出来. np.random.randn()产生一个正态分布的随机数组,并显示出来. 显示鸢尾花花瓣长度的正态分布图,曲线图,散点 ...