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. zzw原创_ipv6下环境配置防火墙及FTP处理一例

    缘由:公司这段时间要将原IPV4地址切换到IPV6,在环境配置的过程中,碰到一坑,平时不太注意的问题,在IPV6下却放大了 实现目标:在IPV6下,机器A可以FTP到机器B,可以传输.下载文件 A机器 ...

  2. C#中,子类构造函数调用父类父类构造函数的正确方式

    正确调用的方式是:

  3. printf()、sprintf()、vprintf()、vsprintf()(转)

    转自http://sumsung753.blog.163.com/blog/static/14636450120112151092934/ 一.printf() printf()函数优点在于可以格式化 ...

  4. 使用 ZipArchive 生成Zip文件备注

    近两日研究了Abp.io 中模板项目的生成原理,是从Github下载源码包,进行修改.替换,然后生成新的zip包提供下载. 项目内部使用了  这个包 Ionic.Zip  Version=" ...

  5. 【调试基础】Part 2 文本字符

    01 字节存储顺序 大端:低字节存在高地址,高字节存在低地址.eg:IBM: 小端:低字节存在低地址,高字节存在高地址.eg:INTEL: 02 字符集 ASCII:128=26小写 + 26大写 + ...

  6. 总结const、readonly、static三者的区别

    const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编译时常量的原因是它编译时会将其替换为所对应的值: b.静态 ...

  7. Python运行时的常见错误

    1)忘记在 if , elif , else , for , while , class ,def 声明末尾添加冒号(:)(导致 “SyntaxError :invalid syntax”) 2)使用 ...

  8. java按照指定格式输出系统时间使用SimpleDateFormat方法

    public class TimeThree { public static void main(String[] args) { SimpleDateFormat d = new SimpleDat ...

  9. Sorting a Three-Valued Sequence(三值的排序)

    Description 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候. 在这个任务中可能的值只有三种1,2和3.我们用交换的 ...

  10. 自动调参库hyperopt+lightgbm 调参demo

    在此之前,调参要么网格调参,要么随机调参,要么肉眼调参.虽然调参到一定程度,进步有限,但仍然很耗精力. 自动调参库hyperopt可用tpe算法自动调参,实测强于随机调参. hyperopt 需要自己 ...