インターネットブラウザを利用してWebサイトからZIPファイルをダウンロードして、ファイルのプロパティを表示させると、下記のように「このファイルは他のコンピューターから取得したものです」から始まる警告が表示されます。
いつからこのような仕様になったのか、Webサイトで調べてみたのですが、どうも、Windows XP Service Pack 2から、インターネットからダウンロードしたファイルにこのフラグが追加される仕様となったようです。Windows XP Service Pack 2がリリースされたのは、2004年のことだそうですので、思った以上に古くからある仕様でした。
このようになった背景には、インターネットから入手した実行ファイルを実行禁止にすれば、感染防止になる、ということがあるのでしょう。インターネットから入手した実行ファイルをチェック前にうっかり実行してしまって感染する、ということはあり得る話です。こういうことを考えると、感染防止という意味では非常に有用な機能だと思います。
一方で、ファイル交換システムなどでファイルを送付した場合、この仕様を面倒に感じる人も多いことでしょう。必要なモジュールをZIPファイルで圧縮して、Webベースのファイル交換サイトなどを利用してファイルを送付することがありますが、このような手続きを踏むと、もれなくこのフラグが添付されることになります。また、ZIPファイルからこのフラグを解除せずに解凍すると、解凍されたファイルにも同様のフラグが追加されるのも非常に厄介です。
業務上、インストーラーやパッチをこのような仕組みを用いてファイルを送付することがありますが、このままインストールなどに利用したりすると、展開したすべてのファイルにこのフラグがついた状態となり、インストールに失敗したり、インストールに成功しても、その後の実行に支障が出たりします。このフラグのついた状態のISOファイルをマウントすると、しばらくエクスプローラーが応答しなくなった経験もあります。
このフラグがついたままZIPファイルを解凍してしまったせいで、せっかく解凍されたファイルを削除して、元のZIPファイルのフラグを解除して、再度解凍する、ということを実施した経験がある方もいるのではないでしょうか?
1GBを超える巨大なZIPファイルを解凍したときなどは、ファイルの削除にも時間がかかりますし、もう一回解凍するのが、ものすごく億劫になります。
そういうときは、PowerShellを利用すると簡単です。
PowerShell上で以下のコマンドを実行すると、対象ファイルのフラグを解除することができます。
Unblock-file -Path "ファイル名"
フォルダ内のファイルを一括で解除する場合は、以下のコマンドを実行します。
Get-ChildItem -Path "フォルダ名" -Recurse -File | ForEach-Object { Unblock-File -Path $_.FullName }
上記の"ファイル名" や "フォルダ名" には、対象のファイル名やフォルダ名をフルパスで入力してください。""(ダブルクォーテーション)で囲んでおくと、空白の入ったフォルダ名やファイル名でも大丈夫です。
安全と面倒は表裏一体です。これからも、このようなユーザーにひと手間ふた手間かけさせてしまう実装は増えていくと思います。しかしながら、マルウェアによるDDoS攻撃や、マルウェアを用いたシステムへの侵入の事案を報道で耳にすると、安全には代えられない、と感じます。