WebBrowserコントロールで、セキュリティゾーンを制御する

WebBrowserコントロールのセキュリティ設定

WebBrowser コントロールでセキュリティゾーンを制御する方法を GotDotNet Japanで
質問していたところ、MSMVP の青柳さんが、サンプルを開発してくれました。
参照: GotDotNet 「WebBrowser コンポーネントでのゾーン指定方法」
C# による実装となっています。
これと、「オリジナルプロトコルを定義する」を組み合わせる
ことにより、ダイナミックコンテンツを任意のセキュリティゾーンで実行させることが
できそうです。
みなさまのご協力に感謝します

09/17/2003 4:49 PM

青柳さんのソースをすこし修正して、オリジナルプロトコルを定義して、
うまく連携させることができました。
※作業中、青柳さんにメッセンジャーでヘルプしていただいて...
セキュリティのほうは、GetSecurityId で値を設定しないと、MapUrlToZone が呼ばれない場合があることを確認しています。

河端善博

09/18/2003 6:21 AM

microsoft.public.dotnet.framework.windowsforms.controls
で質問をあげておいたところ、
Ying-Shen Yu[MSFT]さんと、Herfried K.Wagner[MVP]さんが
乗ってきてくれました。
セキュリティゾーンに関するレジストリをいじったあと、InternetSetOption API にINTERNET_OPTION_SETTINGS_CHANGEDオプションを指定して、呼び出したらどうだって。
こちらのほうが、進んでいるようですので、フィードバックしよう

河端善博

09/18/2003 9:50 AM

あ、楽しそうな事してる(^^;

 WebBrowserコントロールをホストするコントロールを作り、そのウインドウでCOMのIFを実装することでForm側の記述量を減らせませんかね?
 ドラッグ&ドロップでFormに置いて、プロパティで ZoneをInternetにするとかできると幸せ(^^;
#もちろんお手伝いいたします

菊池 和彦

09/19/2003 1:4 PM

菊池さんありがとうございます。
しばらく手をつけられそうにないので、どなたか、まとめていただけると幸いです
GotDotNet Samples にも公開したいと。

河端善博

09/22/2003 4:6 PM

 えと、とりあえず、青柳さんのコードをベースとして、UserControl内にWebBrowserをホストすることで、ISecurityManagerにたどり着くまでの手順はユーザコントロールを配置するだけで完了できるようにしてみました。
 ISecurityManagerの実装は当然として別に必要なのですが、delegateによってさらに外部に委譲する、delegateが設定されていなければ 何もせずにINET_E_DEFAULT_ACTIONを返すって所まではできそうです。
 ここまで行けば、MapUrlToZoneを置き換えたい場合の手順はコントロールを置き、コンポーネントを置き、MapUrlToZoneにdelegateをつなぐだけでできそうな気がします。
 ただし、SecurityManagerの置き換えは強力すぎる気が…
 InternetゾーンのURLを平気でMy Computerゾーンで表示できてしまったので諸刃の剣な気がします。
 コードアクセスセキュリティ等の仕掛けレベルでの安全性確保や、制限を強くする方向にしか適用できないようにする等の実行時セキュリティも検討必要ですね。

菊池

10/07/2003 10:49 AM

 ご無沙汰しました、ちょっとセキュリティ面相談させて下さい。

 考えた事として、アセンブリのロードされたゾーン以上の権限を設定できないようにするって事はできそうです。(コードアクセスセキュリティの適用)

 上位プログラムがWebBrowserコントロールに設定しろと返したZoneに対して ZoneIdentityPermissionをDemandしてみるって手順です。
 これでアセンブリが(ロードされたor呼び出された)Zone以上のゾーンをWebBrowserControlに渡す事での越権を防ぐ事ができそうです。

 ブラウザコントロールにロードされたコンテンツのZoneを判定する方法が判れば、そのZoneとアセンブリのロード元ゾーンの弱いほう以上のパーミッションを与えないって制御ができる気がするのですが。
 現状ではセキュリティ系の処置をごちゃごちゃ悩んでいる段階です。

 単純に考えた場合、COM/InterOpを利用する時点でこのコンポーネントはFullTrustの権限をもたなければ動作しないと思うので、この状況でセキュリティ面って考えても無駄なのではとも思いましたが一応色々考えてます。
 セキュリティ的な問題なので不完全な状態で公開してもいいかなとも思いましたが今週末には自分のHP予定地に上げられると思います。

菊池

Add Comment

Name

EMail

Homepage

Comment (HTML not allowed)