ActiveXがデフォルトのセキュリティ設定で適切に機能しない
-
10-07-2019 - |
質問
C#でActiveXコントロールを作成し、regasmコマンドを使用して動作させました。セキュリティレベルが低く設定されている限り正常に動作します。次に、次のステップとして.cabインストーラー(ICD -インターネットコンポーネントダウンローダー)、およびテスト証明書で.cabファイルとActiveX .dllファイルに署名しました。ブラウザからhtmlページにアクセスすると、インストール部分はIEのデフォルトのセキュリティ設定で正常に動作しますが、最後には何もインストールされておらず、ActiveXの場所に赤い十字が表示されているようです。さらに、Windowsディレクトリの下のDownload Program Filesフォルダーを調べました。ステータス列には「不明」という単語が表示されています。 「インストール済み」の場合他のすべてのactiveX。何が問題なのか。
さらに、アセンブリを登録するためにregasmコマンドを使用すると正常に動作し、ActiveXに署名しましたが、ブラウザー設定でセキュリティバーを低くする必要がありますか?なぜそうですか?次に、署名の目的は何ですか? .infファイルで RegisterServer = yes
を使用しました
誰かがすでにこの問題を経験している場合、私に知らせてください?
解決
IEで実行するには、IObjectSafetyを実装して、IEが信頼できない呼び出し元や信頼できないデータで呼び出されても安全であることを認識する必要があります。 (それが実際に安全であれば、それはそうです)
個人的には、これはC ++と&でのみ行っています。 C#ではなくATLですが、これはC#でこれを達成するのに役立つように見えるブログ投稿です。
この理由は、悪意のある個人によるスクリプトがオブジェクトを使用してIEが提供する通常のセキュリティをバイパスする可能性があるため、ActiveXオブジェクトが信頼できないページ自体を防御する必要があるためです。
キャブに署名すると、ダウンロードしているキャブはダウンロードしていると思われるキャブであることをユーザーに伝えます。つまり、悪意のある個人がキャブを危険なキャブに置き換えていないことを示しています。パブリッシャーとしてあなたを信頼している場合、ActiveXObjectはそれ自体で、または信頼する他のコードと組み合わせて、悪を行わないことを信頼できます。
IObjectSafetyを実装すると、INTERFACESAFE_FOR_UNTRUSTED_CALLERが返されます。 INTERFACESAFE_FOR_UNTRUSTED_DATA、IEにオブジェクトを悪意を持って使用することはできないことを伝えているため、ユーザーが明示的に信頼していないコードと一緒に実行しても安全です。
他のヒント
私にとっては、上記の解決策は機能しません。 tlbも登録する必要がありました
with:regasm MyDll.DLL / tlb