Internet Explorer下載檔案的終極過濾 ———— 徹底監視Internet Explorer的下載 (轉)
Inte Explorer的終極過濾
———— 徹底監視Internet Explorer的下載
你是否想過類似下面的一些問題?
l 如何過濾IE中的flash?
l 如何過濾在網頁中嵌入e的尼姆達?
l 如何實現像netants、那樣的下載監視呢?
看到上面問題,你會很快認為這很簡單:
“對IE的下載進行監視不就得了?發現字尾是”.swf”的檔案就不進行下載。這樣就過濾了flash.同理,發現字尾是”.eml”的下載也做同樣處理……”
那麼,話說回來,如何徹底監視IE的下載呢?你不會為了這個寫一個吧?
如果你熟悉IE的話,會馬上意識到---使用BHO(Browser Helper )。
但,僅僅使用BHO是不夠的。
BHO類似鉤子(hook),特別的地方是:它鉤的是IE的事件。
如果你還不熟悉BHO,請到MSDN網站看下面的文章:
.com/Mind/0598/browhelp.htm">
透過上面文章你會發現,BHO可以”hook”到IE的所有事件:
Navigate->NavigateComplete->Downloaegin->Complete->DocumentComplete等等。
但它hook不到IE的整個下載事件!比如:
首頁裡包含了大量的gif檔案,BHO面對著它們變成了盲人……
說了這麼多廢話~~~~下面拿出克敵法寶吧!先了解一下IinternetProtocol 的Start方法:
HRESULT Start(:namespace prefix = o ns = "urn:schemas-microsoft-com::office" />
LPCWSTR szUrl,//
IInternetProtocolSink *pOIProtSink,
IInternetBindInfo *pOIBindInfo,
D grfPI,
HANDLE_PTR dwReserved
);
只要實現了IE的這個IinternetProtocolRoot介面,在其Start方法中檢查szUrl,就做到了監視IE的下載。
那麼,怎麼過濾呢?再看看IinternetProtocolSink介面的ReportResult方法!
HRESULT ReportResult(
HRESULT hrResult,
DWORD dwError,
LPCWSTR szResult
);
只需要在Start中其第二個引數pOIProtSink的ReportResult方法就可以實現過濾。實際上就是在IE下載檔案之前欺騙IE說檔案已經下載完畢了。
比方說我們要過濾IE中的gif檔案,那麼只需要實現以下程式碼:STDMETHODIMP CQUrl::Start(//這裡,我的類名叫CQUrl,大家不必理會
LPCWSTR szUrl, IInternetProtocolSink *pIProtSink,
IInternetBindInfo *pIBindInfo, DWORD grfSTI,
DWORD dwReserved)
{
USES_CONVERSION;
char *str=OLE2A(szUrl);
if(strlen(str) > 4)
{
str = str + strlen(str) - 4; //取資源的最後四個字元,用來比較檔案字尾
if(_strnicmp(str,".gif",4) == 0)//字尾是gif
{
pIProtSink->ReportResult(S_OK, 0, 0);//告訴IE:下載已經結束了! return S_OK;//返回,如果你返回INET_E_DOWNLOAD_FAILURE將看到另外一幅景象……
}
}
return_E_USE_DEFAULT_PROTOCOLHANDLER;
}
熟悉了監視過濾的一般方法,下面開始把監視過濾工作深入到IE之中吧!
拿上面MIND雜誌的iehelper的例項說起。
我們在IEHelper的基礎上填加一個ATL,在其中繼承IinternetProtocol
並實現IinternetProtocolRoot的Start方法就可以了!
剩下所需的工作僅僅是在IEHelper的構造中實現上面填加的atl物件。
在IEHelper類里加兩個介面的指標:
IInternetSession* m_pSession;
IClasactory* m_pFactory;
然後建立物件:
CIEHlprObj()
{
HRESULT hr = CoGetClassObject(CLSID_FiltUrl, CLSCTX_SERVER, NULL, IID_IClassFactory, (void**)&m_pFactory);
if(hr==S_OK)
{
if(CoInternetGetSession(0, &m_pSession, 0)==S_OK)
m_pSession->RegisterNameSpace(m_pFactory, CLSID_FiltUrl, L"http", 0, NULL, 0); //監視HTTP服務
}
}
必要的時候析構:
CIEHlprObj::~CIEHlprObj()
{
if(m_pSession!=NULL)
{
m_pSession->UnregisterNameSpace(m_pFactory, L"http");
m_pSession->Release();
m_pSession = NULL;
}
if(m_pFactory!=NULL)
{
m_pFactory->Release();
m_pFactory = NULL;
}
}
唉,好累,不寫了,煩,顛三倒四的。
具體的看程式碼吧:(請不要把程式碼用於商業用途!)
/FiltUrlIE.rar">
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993609/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 下載 Internet Explorer 11(離線安裝程式)
- Internet Explorer漏洞分析(三)[下]——CVE-2014-6332
- win10 internet explorer如何解除安裝_win10解除安裝internet explorer11的方法Win10
- win10 internet explorer怎麼解除安裝_win10 internet explorer如何解除安裝Win10
- z-index does not work in Internet Explorer with pdf in iframeIndex
- Internet Explorer漏洞分析(五)——CVE-2016-0199
- Internet Explorer漏洞分析(三)——CVE-2014-6332
- Internet Explorer漏洞分析(一)——CVE-2012-1876
- Internet Explorer漏洞分析(四)——CVE-2012-4792
- Internet Explorer漏洞分析(二)——CVE-2013-2551
- Internet Explorer漏洞分析(三)[上]——VBScript Scripting Engine初探
- Internet Explorer漏洞分析系列(一)——CVE-2012-1876
- Internet Explorer EPM沙盒跳出漏洞的分析(CVE-2014-6350)
- 視訊下載終極利器!簡單粗暴,支援全網視訊下載!
- internet選項 對應的檔案
- Win10系統下如何清理Internet臨時檔案Win10
- 【轉載】Linux下徹底解除安裝mysql詳解LinuxMySql
- Java SE 檔案上傳和檔案下載的底層原理Java
- win10系統下如何開啟Internet臨時檔案Win10
- 過濾器解決檔案上傳下載跨域問題過濾器跨域
- 前端通過 post 下載檔案前端
- 轉:檔案的斷點下載服務端斷點服務端
- 檔案下載
- vue/js實現檔案流下載,檔案下載進度監聽VueJS
- 透過dns進行檔案下載DNS
- js 透過連結下載檔案JS
- 00、下載檔案
- Ajax 下載檔案
- js 檔案下載JS
- HttpClient 下載檔案HTTPclient
- JAVA檔案下載Java
- Response下載檔案
- FastApi下載檔案ASTAPI
- 15種下載檔案的方法
- 檔案的上傳與下載
- 下載檔案的15種方法
- ADNI的fMRI檔案下載教程
- ServletOutputStream在nginx轉發下輸出檔案下載的一種方法ServletNginx
- 【轉載】windows下刪除指定日期前的檔案Windows