SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 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コントロールの実行許可・不許可を制御する方法を解説します。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
IInternetSecurityManagerの実装

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/246 2006/08/08 11:36

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング