Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから
公開日:2015年6月21日

PHP から Sophos でアップロードファイルをウィルススキャンする

はじめに

前の記事で、Sophos Antivirus for Linux Free Edition を CentOS にインストールしました。折角なので、今度はアップロードしたファイルを、PHP から Sophos でウィルススキャンする方法をご紹介します。

PHP から Sophos でウィルススキャン

Sophos でウィルススキャンした結果を受け取るには、CentOS のコマンドラインで以下のように2行コマンドを実行する必要があります。

PHP から CentOS のコマンドを実行するには、system 関数と exec 関数がありますが、実行結果を受け取りたいので、exec 関数を使用します。また、2行コマンドを実行するので、; でつないで1行にする必要があります。

具体的には、以下のようになります。

$output に Sophos のウィルススキャン実行結果が格納されます。

ですが、2行コマンドを実行していることで、2行分の実行結果が  $output に格納されてしまうので、end 関数を使用して、最後の結果のみ取得します。これで、ウィルススキャンの実行結果を判断するようにします。

なお、実行結果は以下のようになります。

0 エラー、ウィルスの検出ともになし
1 ユーザーが「Ctrl + C」を押して検索を中断した
2 エラーが発生したため検索が中断した
3 ウィルスが検出された

PHP でファイルのアップロード

PHP でファイルのアップロードを行うには、注意点が多いのですが、詳しくは参考書籍、参考サイトをご確認ください。一応、ソースコードにコメントをつけてあります。

なお、ウィルススキャンをサーバー上の一時ファイルに対して行っているのは、格納後にウィルススキャンをしたくなかったこと、exec コマンドからの実行では Sophos はウィルスの駆除ができないこと、一時ファイルは処理を抜けると自動的に削除されることが理由です。

ソースコード

■upload.php

■accept.php

■result.php

おわりに

PHP から Sophos でアップロードファイルをウィルススキャンする方法を見てきましたが、いかがでしたでしょうか。

やり方が分かってしまえば、さほど難しくないと思います。うまくいくまで多少手こずりましたが。

それよりも、ファイルアップロード処理そのものの方が難しいのではないでしょうか。

特に、画像のマジックバイトの処理は注意が必要ですね。最近は、Internet Explorer 7 をサポート対象外にするサービスも増えているから対応しないという選択肢もあるかとは思いますが、脆弱性があるのを分かっていてサービスを提供するのもどうだろうかと思います。

この記事が参考になれば幸いです。

参考文献・サイト


スポンサーリンク




カテゴリー:ブログ

Twitter でも、いろんな情報を発信しています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA