Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

Microsoft Web Browserコントロールのセキュリティを制御する

スクリプトやActiveXコントロールの実行を制限する方法

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2006/01/10 14:00

Windowsフォームアプリケーションでは、Microsoft Web Browserコントロールを使用して簡単にブラウザ機能を追加できますが、デフォルトではHTML内のスクリプトやActiveXコントロールまで実行されてしまいます。IInternetSecurityManagerを実装すると、スクリプトやActiveXコントロールの実行許可・不許可を制御することができます。

目次

はじめに

 Windowsフォームアプリケーションでは、[Microsoft Web Browser]コントロールを使用して簡単にブラウザ機能を追加し、HTMLを表示することができます。しかし、デフォルトのままではHTML内のスクリプトやActiveXコントロールが実行されてしまいます。IInternetSecurityManagerを実装すると、スクリプトやActiveXコントロールの実行許可・不許可を制御することができるようになります。

対象読者

 Windowsフォームアプリケーションで[Microsoft Web Browser]コントロールを使用している方を対象にしています。この記事の内容を完全に理解するにはCOMInteropやWin32 APIの知識が必要になりますが、コードを利用するだけであれば通常のC#/VB.NETの知識で十分応用可能だと思います。

必要な環境

 サンプルはVisual Studio .NET 2003で作成し、.NET Framework 1.1で動作確認をしていますが、.NET Framework 1.0でも問題なく動作するでしょう。

Web Browserコントロールを使用したアプリケーション

 Visual Studio .NET 2003では、簡単にブラウザ機能を追加することができます。Visual Studio .NETの[ツールボックス]に[Microsoft Web Browser]コントロールが存在しない場合は、以下の手順で追加することができます。

  1. [ツールボックス]上で右クリックし、[アイテムの追加と削除...]を選択します。
  2. [ツールボックスのカスタマイズ]ダイアログボックスの[COM コンポーネント]タブで、[Microsoft Web Browser](shdocvw.dll)を追加します。

 それではサンプルとして、とても単純なアプリケーションを作成してみます。サンプルファイルのソースコードの「WebBrowserSecurity01」フォルダに、実際に作成したソースコードが入っています。

サンプルアプリケーション
サンプルアプリケーション

 上記のようにURLを入力するテキストボックスとラベル、[移動]ボタン、そして[Microsoft Web Browser]コントロールをフォーム上に配置します。クライアント領域の大部分を占めるまっ白な部分が[Microsoft Web Browser]コントロールです。コントロールを配置できたら、[移動]ボタンのクリックイベントに以下のようなコードを記述します。

移動ボタンのクリックイベント(C#)
private void button1_Click(object sender, System.EventArgs e)
{
    object v = System.Reflection.Missing.Value;
    this.axWebBrowser1.Navigate(
        this.textBox1.Text, ref v, ref v, ref v, ref v);
}
移動ボタンのクリックイベント(VB.NET)
Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click

    Me.AxWebBrowser1.Navigate(Me.TextBox1.Text)
End Sub

 これで最低限のブラウズ機能を持つサンプルアプリケーションは完成です。アプリケーションを実行し、テキストボックスに適当なURLを入力して「移動」ボタンをクリックしてください。[Microsoft Web Browser]コントロールのNavigateメソッドが呼び出され、そのページが表示されます。ためしに「http://codezine.jp/」を表示したのが以下の図です。

codezine.jpを表示
codezine.jpを表示

Web Browserコントロール上のスクリプトとActiveXコントロール

 [Microsoft Web Browser]コントロールは、Microsoft Internet Explorer(以下「IE」と略します)の機能を、ほぼすべて持っています。むしろIEは、[Microsoft Web Browser]コントロールに、メニューやステータスバーなどといった飾りを付けたものだと言ってもよいのかもしれません。ということは、[Microsoft Web Browser]コントロールにも、JavaScriptやActiveXコントロールを実行する機能が含まれているということになります。以下のHTMLを「C:\test.htm」として保存し、上記で作ったサンプルアプリケーションで表示してみましょう。

JavaScriptとActiveXコントロールを含んだHTML
<html>
<head>
<script language="javascript">
function DoAlert()
{
    alert('alert!(function)');
}
</script>
</head>
<body>
<form>
<input type="button" value="クリックでアラートを表示(function)"
       onclick="DoAlert();" />
<p />
<input type="button" value="クリックでアラートを表示(inline)"
       onclick="alert('alert!(inline)');" />
<p />
<object id="mediaplayer"
        classid="clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95"
        width="200" height="200">
<param name="filename" value="c:\windows\clock.avi" />
</object> 
</form>
</body>
</html>
スクリプトとActiveXコントロールを含んだHTMLを表示
スクリプトとActiveXコントロールを含んだHTMLを表示

 ボタンを押すと、JavaScriptを使用してアラート(メッセージボックス)が表示されますし、MediaPlayer ActiveXコントロールも問題なく実行されます(上記のHTMLでは「c:\windows\clock.avi」という動画ファイルが存在することを前提としています)。

 さて、これらスクリプトやActiveXコントロールの実行を禁止することができるでしょうか? 残念ながら[Microsoft Web Browser]コントロールのプロパティを見回してもそれらしいものはありません。実はIInternetSecurityManagerというCOM interfaceを使って制御を行えるようになっています。以下ではこのIInternetSecurityManagerを使用して、スクリプトやActiveXコントロールの実行許可・不許可を制御する方法を解説します。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 青柳 臣一(アオヤギ シンイチ)

    Twiter: https://twitter.com/ShinichiAoyagi 中学生のころにプログラミングの楽しさを知り、それ以来趣味として仕事としてプログラミングに関わるようになる。23才のときに株式会社ディーバを設立。CADソフトウエア、給水設備監視システムなどのオリジナルソフトの開発...

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5