zoukankan      html  css  js  c++  java
  • 通过自定义ISAPI Filter来禁止敏感文件的访问

    //说明:本文来自互联网

    有不少站点可能都有这样的情况,利用.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[2];
    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:bingb@emount.com.cn>mailto:bingb@emount.com.cn</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可以看到返回信息。

    有任何问题可以联系:bingb@emout.com.cn
    希望该文章能对您有用。

  • 相关阅读:
    有关于CSS的面试题和练习
    Yslow&PageSpeed– 诊断各种缓慢症状
    使用Plant Simulation连接SQL Server
    利用Microsoft Sql Server Management studio 创建数据库的示例
    SQL2008配置管理工具服务显示远程过程调用失败
    用C语言的rand()和srand()产生伪随机数的方法总结
    Fisher–Yates shuffle 洗牌算法(zz)
    Unity3D导入MAX文件的一些问题(zz)
    UG中STP203和STP214的区别
    生产线工序基础知识
  • 原文地址:https://www.cnblogs.com/Winston/p/1271229.html
Copyright © 2011-2022 走看看