通过自定义ISAPI Filter来禁止敏感文件的访问
//說明:本文來自互聯(lián)網(wǎng)
?
有不少站點可能都有這樣的情況,利用.inc以及.asa包含文件來存儲數(shù)據(jù)庫連接信息,特別是.inc的文件,想改掉有需要
太多的時間和做大幅度的程序調(diào)整,比如我有個客戶就是光.inc文件就有幾十個,更別說asp文件了,想改是無從下手的。
于是我利用那位外國朋友的經(jīng)驗,做了很少的一點改動,形成一個isapi的過濾器,希望能使您的站點的inc以及asa文件安
全一點。
我不想把標準的ISAPI的接口函數(shù)做一一介紹,比較全面的知識您可以利用VC的ISAPI工程模板來學習。在這里我著重介紹
OnUrlMap以及如何用它來完成我們保護INC和其他文件安全性的過程。
isapi filter(Internet Server Application Program Interface (ISAPI) filter)是綁定在IIS系統(tǒng)并監(jiān)控發(fā)生在客戶端
從WEBSERVER讀取文件事件的一種基于windows的程序應用。
由于他可以控制客戶端和服務器間的數(shù)據(jù)交換,我們可以用它來提高WWWSERVER的應用性能比如擴展HTTP日志功能、實現(xiàn)自
己的加密和驗證系統(tǒng)。
?
OnPreprocHeaders -- 服務器預處理客戶端頭文件.
OnAuthentication -- 客戶端驗證.
OnUrlMap -- 服務器映射邏輯URL到物理路徑.
OnSendRawData -- 服務器發(fā)送未經(jīng)處理的數(shù)據(jù)到客戶端(之前).
OnReadRawData -- 客戶斷發(fā)送未經(jīng)處理的數(shù)據(jù)到服務器(之后,但在服務器處理之前).
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];
//到服務器的數(shù)據(jù)已經(jīng)編碼過了
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可以看到返回信息。
有任何問題可以聯(lián)系:bingb@emout.com.cn
希望該文章能對您有用。
轉載于:https://www.cnblogs.com/Winston/archive/2008/08/19/1271229.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的通过自定义ISAPI Filter来禁止敏感文件的访问的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 明天回家
- 下一篇: ADO.NET Entity Frame