Authentication




Cancel OK
B!コメントする  2011-11-29 21:39:00 by old

アップロードファイルのウィルスチェック

ブラウザから色々とアップロードすることが出来ます。
画像の投稿であれば、画像であることの確認やファイルサイズや形式のチェックなど様々なチェックを行ってからアップすると思いますが、ウィルスかどうかのチェックはアンチウィルスソフトにしてもらう必要があります。
定期的にチェックしている場合もありますが、それで手遅れになる場合もあるので、アップロードされるファイルは随時チェックを行うようにしましょう。

簡単ですがClam Antivirusを使ったアップロード時のチェックの一例を紹介します。
ClamAntivirusのインストール方法なんかはGoogle先生に聞いてください。
CentOSあたりだとRPMで簡単にインストールが可能です。

if (isuploadedfile( $FILES["upfile"]["tmpname"] ) ) 
{

// コマンド組み立て
$commandval = "clamscan " . $FILES["upfile"]["tmpname"];
system( $command
val, $return );

if( $return == "0" )
{
if (moveuploadedfile( $FILES["upfile"]["tmpname"], "sample/" . $FILES["upfile"]["name"]) )
{
chmod("sample/" . $
FILES["upfile"]["name"], 0644);
echo "アップロード完了";
} else {
echo "アップロードできませんしたっ!";
}
}
else
{
echo "ウィルスでした";
}

} else {
echo "ファイル選択してなくない?";
}


アップロード自体は以下の流れでアップロードされます。
1.アップロードされたらテンポラリ(/tmpなど)に一旦保存
2.ちゃんとアップロードされたら、テンポラリから指定の場所へ移動

となります。
「1」のテンポラリに上がった際に、「clamscan」というコマンドでアップロード先のファイルをチェックします。
戻り値が$returnに入りますが、ウィルスでない場合は「0」、ウィルスと判定された場合は「1」が入ります。
そこで、ウィルスではない場合のみ「2」のテンポラリから指定の場所へ移動を行うようにしてます。
ウィルスと判定された場合は何もしないので、テンポラリにあるファイルはそのまま消えてしまいます。

ここではsystemコマンドで判定していますが、execコマンドでも可能です。
execコマンドの場合は以下の戻り値で判定が可能です。
正常ファイル:Infected files: 0
ウィルス判定:Infected files: 1

もちろん複数のウィルスが含まれている場合は「1」以上の値になります。
このようにして戻り値でウィルスかどうかの判定が可能になります。

有償ではありますが、有名なところでF-Secureなどもあります。
戻り値やコマンドは違いますが、こちらも同様な手順でのチェックが可能です。

このようにしてお手軽にウィルスチェックが可能ですので、ファイルのアップロードが可能なサーバーでは随時チェックするようにしましょう。


セキュリティー  

  • コメント
  • コメントはまだありません