欢迎光临
我们一直在努力

一个颇有用途的ISAPIFILTER(使您的INC、ASA文件安全一点)

建站超值云服务器,限时71元/月

在以前看到老外的一篇文章,现在记不起这个很不错的热情的有如我一般的年轻人了,不过邮箱里还有和他讨论的邮件。
有不少站点可能都有这样的情况,利用.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
希望该文章能对您有用。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 一个颇有用途的ISAPIFILTER(使您的INC、ASA文件安全一点)
分享到: 更多 (0)