SafeCtl.exe ActiveX 控制項中實作 IObjectSafety

文章翻譯 文章翻譯
文章編號: 164119 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

SafeCtl.exe 範例會示範如何修改 MFC 為基礎的 ActiveX 控制項來指示發行程式碼的人以及是否控制項已遭竄改。這個範例可以幫助識別控制項是否安全用於指令碼和進行初始化。

其他相關資訊

下列檔案是可以從 Microsoft 下載中心 」 下載:
SafeCtl.exe
如需有關如何下載 Microsoft 支援檔案的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
119591如何從線上服務取得 Microsoft 的支援檔案
Microsoft 已掃描這個檔案有無病毒。Microsoft 使用已張貼檔案的日期中的 [可用的最新病毒偵測軟體。檔案儲存在安全性強化的伺服器上,協助防止未經授權的任何變更的檔案。

在網際網路總管 3.0 或更新版本,使用者可以將 ActiveX 控制項的形式的程式碼加入至他們的網頁。<object>標記用來指定控制項。建立控制項的執行個體之後可透過控制項的保存性介面設定其屬性。比方說於 Internet Explorer 剖析的 HTML 網頁時遇到 <object>標記的內容中每個 <param>標記,Internet Explorer 傳遞透過對應控制項的屬性包IPersistPropertyBag 介面。此外,可以透過內嵌的指令碼在網頁中,執行該方法並修改透過控制項的自動化介面公開屬性的使用自訂控制項的行為。

驗證碼程式碼簽章技術可讓結束使用者識別誰發行程式碼,並確認已簽署後已遭沒有人竄改該程式碼。它並不保證程式碼能夠安全,當它的屬性以不受信任的值初始化或當其自動化模型由不受信任的指令碼所主導。若要避免這種潛在的安全性 hazards,預設 Internet Explorer 安全性設定,都可以存取透過 Internet Explorer 選項 的 [安全性] 索引標籤屬性工作表、 需要的控制項註冊本身做為實作適當的元件類別或控制項實作 IObjectSafety 介面。範例會說明兩者。

它會設定內嵌在 HTML 網頁中控制項的屬性之前 Internet Explorer IObjectSafety 查詢控制項。如果支援,Internet Explorer 會再呼叫 SetInterfaceSafetyOptions 方法在這個介面上傳遞值 INTERFACESAFE_FOR_UNTRUSTED_DATA 以及介面識別項 (IID) 的持續性介面。在 HTML 網頁今天,位置屬性傾向於初始化透過 <param>標記,IID 是 IID_IPersistPropertyBag。IID 是為情況下您可能會想要被保護安全某些介面,但不是會在其他人,和並不重要本範例中所提供的。 實作範例會檢查以確定支援該介面。 如果控制項可以執行這項用戶端系統,無論資料用可能會透過該持續性介面進行初始化],並支援保存性介面沒有傷害的控制項的實作,IObjectSafety::SetInterfaceSafetyOptions 方法應傳回 S_OK。否則,應傳回 E_FAIL。

在允許內嵌於網頁會執行任何指令碼之前 Internet Explorer 同樣地透過呼叫控制項的 IObjectSafety:: SetInterfaceSafetyOptions 方法而是將值傳遞,但 INTERFACESAFE_FOR_UNTRUSTED_CALLER 和一些指令碼的 IID 介面,這通常是 IID_IDispatch。控制項應傳回 S_OK 或 E_FAIL 適當地。

如果控制項不支援 IObjectSafety,Internet Explorer 會使用元件類別管理員來查看如果控制項實作安全初始設定的類別]、 [CATID_SafeForInitializing,] 和 [安全的分類 CATID_SafeForScripting,分別。

如果控制項不支援 IObjectSafety,並將尚未註冊本身做為實作適當的元件] 類別,並且如果 Internet Explorer 安全性層級設定為 [高,Internet Explorer 預設不會初始化控制項的屬性,也不會執行任何內嵌於頁面的指令碼。在這種情況下的使用者會收到包含下列文字的對話方塊:
避免潛在的安全性違規
此頁包含不是可驗證安全顯示的主動式內容。若要保護您的電腦,將不會顯示此內容。
下列是取自 Paul Johns 發行項的指導方針的清單"簽章和標記 ActiveX 控制項:"
  • 控制項並不會去檔案系統。
  • 控制項並不會去 (除了登錄,並取消註冊本身) 登錄。
  • 控制項不會 overindex 陣列或否則操作不正確的記憶體。
  • 控制項驗證 (並修正) 包括初始化、 方法參數和屬性集函式的所有輸入。
  • 控制項不會濫用使用者提供或,是關於該使用者的任何資料。
  • 控制項已在許多情況下測試。
如需詳細資訊請造訪下列 Microsoft 網站]:
簽章與標記 ActiveX 控制項
http://msdn2.microsoft.com/en-us/library/ms974305.aspx
如果控制項作者已經確認上述條件已經符合除了任何其他條件它們可以想像,他們應該考慮支援這兩個 IObjectSafety 以及登錄其控制做為實作適當的元件類別。如需每種方法的優缺點的清單,檢閱對應的區段,保羅 Johns 文章簽章和標記 ActiveX 控制項。

若要編譯

建置範例所需的 Microsoft Visual C++ 5.0 或 Microsoft Visual C++ 6.0。從封存解壓縮檔案後 Safectl.mdp 專案載入 Microsoft 開發 o 人 h 員 ? 工 u 具 ? Studio 和建置專案。做為建置程序的一部分,控制項應該登錄自己。

警告稍後使用兩個所列的前置處理器符號,本章節中修改這個範例之前您必須取消註冊控制項,如果它已經被建置或在電腦上註冊。若要執行此動作執行 與/u 參數為您的控制項的 [Regsvr32.exe]。您也可以開發 o 人 h 員 ? 工 u 具 ? Studio 會這樣目前專案中新增自訂工具項目。在 [工具] 功能表上按一下 自訂,然後再按一下 [工具] 索引標籤建立新的項目包含下列資訊:
                Name: &Un-register ActiveX Control
             Command: e:\Program Files\DevStudio\SharedIDE\BIN\REGSVR32.EXE
           Arguments: /u /v "$(TargetPath)"
   Initial Directory: $(TargetDir)
				
這個點在您可以使用"工具/取消登錄 ActiveX 控制項 」 項目,移除註冊您的控制項之前加入或移除特定範例的前置處理器定義。

若要建置控制項,讓它本身註冊為實作之 「 安全的初始化 」 和 「 「 安全用於指令碼 」 元件類別請依照下列步驟執行:
  1. 按一下 [專案] 功能表 設定]
  2. 按一下 [C + +] 索引標籤,然後定義下列前置處理器定義:
    L_USE_COMCAT
  3. 按一下 [確定] 關閉 [設定] 對話方塊,並再重建控制項。
若要建置控制項,讓它而是會實作 IObjectSafety,請依照上述步驟執行,但 L_USE_COMCAT 取代 L_IMPL_OBJECTSAFETY。

它也是有效定義這兩個前置處理器符號。請注意這些符號是針對此專案。預設情況下,組建設定專案的定義這兩個前置處理器符號。

若要執行

範例控制項已經建置並成功註冊之後,啟動 Internet Explorer,然後開啟 [隨附範例的 [Safectl.htm] 頁面。

如果控制項已設定為本身註冊為安全或實作 IObjectSafety,控制項標題應該閱讀 < 安全初始化!"當您按一下 [控制項您應該會收到下列訊息:
我必須是安全用於指令碼 !
如果 Internet Explorer 設定為其最高的安全性設定,相關聯的指令碼不會執行,並且您會收到下列訊息:
不安全的初始化!


附註如果您正在建置並測試不同的設定,此範例的確定您重新整理瀏覽器中的網頁。如果您不執行重新整理頁面,您可能正在使用快取的版本的控制項而非最新的組建。

?考

更多關於安全 API,請參閱 [安全 ActiveX SDK 線上文件中的 API 參考。

如需有關簽署的程式碼的詳細資訊,請參閱 ActiveX SDK 線上文件中的 「 簽章與 Microsoft Authenticode 技術 」。

如需有關元件類別的詳細資訊,請參閱 「 元件類別 」 主題 ActiveX SDK 線上文件]。

如需有關如何實作元件物件模型 (COM) 介面在 MFC 中,請按一下下列文章編號,檢視 「 Microsoft 知識庫 」 中的發行項件:
141277如何使用 Visual C++ 覆寫 MFC 應用程式中的介面
如需有關如何開發 ActiveX 控制項及如何部署在 Web 上的深入資訊,請造訪下列 Microsoft 網站:
ABC MFC ActiveX 控制項
http://msdn.microsoft.com/en-us/library/ms968497.aspx

屬性

文章編號: 164119 - 上次校閱: 2007年4月26日 - 版次: 5.4
這篇文章中的資訊適用於:
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 3.0
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 6.0
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
關鍵字:?
kbmt kbdownload kbfile kbinfo kbsample KB164119 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:164119
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com