私のWebホストがPOSTファイルのPHPでハッキングされて以来、ここ数日トラブルに見舞われました。私はPHPコードを含む.png
拡張子のファイルを扱ってきました。有効な.png
ファイルかどうかを確認するために1つずつ編集することもできません。
.png
を持つファイルが本物か偽物かを一括チェックする方法はありますか?
私のWebホストがPOSTファイルのPHPでハッキングされて以来、ここ数日トラブルに見舞われました。 PHPコードが含まれる.png拡張子のファイルを扱ってきました。
これが、アップロードスクリプトにエラーチェックを実装する必要がある理由です。そのように、アップロードされたファイルをテストして、データが有効であることを確認し、データが有効でない場合、ファイルを破棄してエラーWebページを表示できます。
有効な.pngファイルかどうかを確認するために1つずつ編集することさえできません。 .pngのファイルが本物か偽物かを一括チェックする方法はありますか?
アップロードされた各ファイルを開くスクリプトを作成し、最初の数バイトをチェックしてファイルが有効であることを確認できますが、上記のようにファイル検証をアップロードスクリプトに追加することにした場合、これは将来の不要な手順です。
また、誰かがコメントで述べたように、スクリプトの実行から少なくともある程度保護するために、アップロードディレクトリを実行ビットが設定されていないディレクトリにします。また、フォルダーを一般の人がアクセスできないようにして、ファイルを検証し、検証したときにのみ一般に受け入れられるようにすることができます。
.pngのファイルが本物か偽物かを一括チェックする方法はありますか?
いいえ、そうでもありません。
回答とコメントで提案されているため:ファイルの最初のXバイトをチェックすることは、PHPコードが含まれているかどうかを判断する適切な方法ではありません(最初のXバイト?)。
さらに、PHPコードはメタデータまたはIDATチャンクで非表示にすることができます。つまり、PHPコードも含まれる完全に有効な画像ファイルを作成できます。
画像にさらに有害なデータが含まれているかどうかを確認する かどうかは非常に困難です。
だからあなたがしたいことは:
<?php
、<?=
、および<script
(大文字と小文字を区別しない)を必ず検索する必要があります。さらに、<?
(短いタグが許可されている場合)および<%
(aspタグが許可されている場合)を検索することもできます。これはPHPコードを処理しますが、他の有害なコンテンツは処理しません。最近では、セキュリティ上の理由からほとんどのホスティングで、短いタグ"<?".
を無効にしています
そのため、アップロードされたファイルで"<?php"
のgrep/strstrを実行できます。一致するものが見つかった場合は、ファイルを削除します。
私たちはこれを長い間フォローしてきましたが、非常にうまく機能しているようです。