当前位置: 首页 > 图文教程 > 网络编程 > ASP > 用ISAPIfilter使INC、ASA文件安全

ASP
嵌入式Web视频点播系统实现方法
GB与BIG5内码转换COM原代码
金额阿拉伯数字转换为中文的存储过程
利用 WSH 作定时工作流程
用InstallShield 进行 ASP 软件的打包和自动安装
服务器获得客户端时间的方法
关于如何读出图片的高度与长度的总结
按下回车键指向下一个位置的一个函数
一个不错的随机函数
一套加解密字符串的函数
一段加密函数(base64)
一段加密函数
使用asp实现支持附件的邮件系统(三)
使用asp实现支持附件的邮件系统(二)
使用asp实现支持附件的邮件系统(一)
检查当前目录下是否存在指定的文件,如果存在就重新命名
MD5加密的javascript实现例子
如何在服务器端调用winzip命令行对上传的多个文件打包压缩
MD5不可逆加密算法的ASP实现实例
看人家用使用InstallShield制作ASP安装程序(6)

ASP 中的 用ISAPIfilter使INC、ASA文件安全


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 62 ::
收藏到网摘: n/a

在以前看到老外的一篇文章,现在记不起这个很不错的热情的有如我一般的年轻人了,不过邮箱里还有和他讨论的邮件。
    有不少站点可能都有这样的情况,利用.inc以及.asa包含文件来存储数据库连接信息,特别是.inc的文件,想改掉有需要太多的时间和做大幅度的程序调整,比如我有个客户就是光.inc文件就有几十个,更别说asp文件了,想改是无从下手的。于是我利用那位外国朋友的经验,做了很少的一点改动,形成一个isapi的过滤器,希望能使您的站点的inc以及asa文件安全一点。
    我不想把标准的ISAPI的接口函数做一一介绍,比较全面的知识您可以利用VC的ISAPI工程模板来学习。在这里我着重介绍OnUrlMap以及如何用它来完成我们保护INC和其他文件安全性的过程。
    isapi filter(Internet Server Application Program Interface (ISAPI) filter)是绑定在IIS系统并监控发生在客户端从WEBSERVER读取文件事件的一种基于windows的程序应用。
    由于他可以控制客户端和服务器间的数据交换,我们可以用它来提高WWWSERVER的应用性能比如扩展HTTP日志功能、实现自己的加密和验证系统。 
OnPreprocHeaders -- 服务器预处理客户端头文件.
OnAuthentication -- 客户端验证.
OnUrlMap -- 服务器映射逻辑URL到物理路径. 
OnSendRawData -- 服务器发送未经处理的数据到客户端(之前).
OnReadRawData -- 客户断发送未经处理的数据到服务器(之后,但在服务器处理之前).
OnLog -- 写日志到服务器文件. 
OnEndOfNetSession -- 会话结束. 
下面是OnUrlMap的用法:
DWORD CJsisapiFilter::OnUrlMap(CHttpFilterContext* pCtxt,
PHTTP_FILTER_URL_MAP pMapInfo)
{
// TODO: React to this notification accordingly and
// return the appropriate status code
DWORD lenURL = strlen(pMapInfo->pszURL);
DWORD dwReferer = 250;
const char * szURL = strlwr((char *)pMapInfo->pszURL);
const char * szExtension = &szURL[lenURL - 3];
const char * inExtension = &szURL[lenURL - 4];
char szReferer[250];
//到服务器的数据已经编码过了
if ( strcmp(szExtension, ".js") == 0 || strcmp(inExtension,".inc") == 0 || strcmp(inExtension,".asa") 
== 0){
pCtxt->GetServerVariable("HTTP_REFERER", szReferer, &dwReferer);
if ( szReferer[0] != ’h’ ) {
char szRedirect;
char szContent[300];
DWORD dwRedirect = 2;
DWORD dwContent;
sprintf(szRedirect,"");
sprintf(szContent, "\r\n\r\n<html>\r\n<head><title>安全文件
</title></head>\r\n<body>\r\n<b><center><font size=+2>该文件包含非公开信息,您没有读取该文件的权限。
</font></b><br><br><br><hr><a 
href=mailto:[email protected]>mailto:[email protected]</a><br></center>\r\n</body>\r\n</html>\r\n");
dwContent = strlen(szContent);
pCtxt->ServerSupportFunction(SF_REQ_SEND_RESPONSE_HEADER,szRedirect,&dwRedirect,NULL);
pCtxt->WriteClient (szContent, &dwContent);
return SF_STATUS_REQ_FINISHED;
}
}
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
编译后将编译完成的DLL文件拷贝到winnt\system32\inetsrv\目录下,然后在站点的属性里面的ISAPI过滤器添加一个过滤器,映射DLL到该文件即可。
重新启动W3SVC服务,然后访问:http://localhost/xxx.inc可以看到返回信息。
有任何问题可以联系:[email protected] 希望该文章能对您有用。