about:blankはインターネットゾーン!?
#2017/5/25修正(マイコンピュータゾーンを追記)
先日「プログラムから(ファイルを使わないで)IEを起動しXMLを開く方法」で開いたページプロパティのゾーンが”インターネット|保護モード:有効”となっていた。なんでインターネット?
ローカルファイルを開いた時には、”マイコンピュータ|保護モード:有効”となるのに。
ゾーンの違いにより何が異なるかというと、ローカルファイルではJavaScriptの実行に「ブロックされているコンテンツを許可」ボタンを押さなければいけないが、インターネットゾーンではそれが無くてもJavascriptは動くという動作の違いが出てくる。(ただしインターネットオプション-セキュリティの設定による)
Internet Explorerにはセキュリティゾーンというものがあり、インターネットオプション セキュリティで以下の4種類の設定ができる。
また、インターネットオプションには表示されていないが+1種類が隠しである。(レジストリの設定により表示できる)
- インターネットゾーン
- ローカル イントラネットゾーン
- 信頼済みサイト ゾーン
- 制限付きサイトゾーン
- マイコンピュータゾーン
ローカルのファイルは、マイコンピュータゾーンに該当する。
ちなみに、インターネットオプション セキュリティにマイコンピュータゾーンを表示させるには、以下のレジストリを設定すればよい。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0
項目:Flags の値を0x21から0x47にする、
インターネットゾーンは、ローカル イントラネットゾーン・信頼済みサイトゾーン・制限付きサイトゾーンのどれにも当てはまらないときに該当する。
信頼済みサイトゾーン・制限付きサイトゾーンは、明示的にURLを登録する必要があるので、通常の環境では当てはまらない。
ローカル イントラネットゾーンは、以下の3つの選択オプション+URLの登録で指定できる。
- 他のゾーンに指定されていないローカル(イントラネット)のサイトを全て含める
- プロキシサーバを使用しないサイトを全て含める(接続-LANの設定-プロキシサーバ接続で設定)
- 全てのネットワークパス(UNC)を含める
"about:blank"は、ローカル イントラネットではないので(他のゾーンに設定されていないし)、結局、インターネットゾーンと判定されてしまう。
→参考:Microsoft TechNet「IE のセキュリティ ゾーンについて」
なお、"about:blank"は、空白ページを示すもので以下のレジストリにURLが登録されている。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AboutURLs の blank項目。登録されている文字列値は"res://mshtml.dll/blank.htm"
about:blankを入力すると、res://mshtml.dll/blank.htmのページが表示される。
直接、URLに”res://mshtml.dll/blank.htm”を入れてIEで表示させると、ローカル イントラネットゾーンになる。仕事場のPCだとローカル イントラネットゾーンだったけど、家ではインターネットゾーンになった。(ちなみに上記レジストリキーを見ると他にもabout:系があることがわかる。)
about:blankをローカル イントラネットゾーンと判定されるためには、インターネットオプション-セキュリティ-ローカル イントラネットのサイトに追加するしかないようだ。でも、そんなことしてもちっともうれしくないか・・・。
インターネットオプション-セキュリティ-ローカル イントラネットのサイトは、以下のレジストリに登録されるので、無理やり通そうと思えばできなくはない・・・。HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains
→参考:MSDN「上級ユーザー向けの Internet Explorer セキュリティ ゾーン関連のレジストリ エントリ」
なお、ローカル イントラネットゾーンのページは「保護モード:無効」となっており、通常、インターネットゾーンのリンクを開くと「保護モード:有効」となるが、VC++ のデバック実行で開いたページからインターネットゾーンのリンクを開いても「保護モード:無効」のままになる。
保護モードが有効であると、IE上で動作するプロセスやアドオンがシステムへのアクセス権限などに制約される。つまり、保護モード:無効のままではヤバい。
(VC++のデバッグ実行ではなく)デバックオプションで生成したexeでも、exeファイルをキックして起動すれば上記の現象は起きないので、通常は問題にならないけど。テストで実行していたら、振る舞いが違うので悩んだので、ここに記しておく。
セキュリティ周りはとてもめんどくさく、環境・設定によって結果が変わってきて安定した結果を得られにくいので混乱してくる。
文句言われたくないので触りたくないな。
« 株:現物売り約定(NSD) | トップページ | 株:現物買い約定(しまむら) »
コメント