ユーザーが画像をアップロードできるようにするWebアプリケーションを開発しています。私の懸念は、特にファイルが無効な形式である場合、ファイルのサイズです。
ファイル全体を読み取る前に、Java(またはサードパーティのライブラリ)で許可されているファイル形式(jpg、gif、png)を確認する方法があるかどうか疑問に思っています。
ユーザーが画像をアップロードできるようにするWebアプリケーションを開発しています。私の懸念は、特にファイルが無効な形式である場合、ファイルのサイズです。
ファイル全体を読み取る前に、Java(またはサードパーティのライブラリ)で許可されているファイル形式(jpg、gif、png)を確認する方法があるかどうか疑問に思っています。
数種類の画像のみをサポートする場合は、画像を (アップロード) ロードすることから始めて、ある時点で最初の数バイトを使用して、アップロードを続行するかどうかを確認します。
かなり多くの画像形式が、最初の数バイトであるマジック ナンバーによって認識されます。番号が一致すれば当然そのファイルが正しいかどうかはわかりませんが、拡張子とマジック番号を一致させて防止するために使用される可能性がありますが、実際にはまったく対応していません。
このページを見て、MIME タイプをチェックする Java を確認してください。ドキュメントまたはソースを読んで、特定のメソッドがファイル全体を必要とするかどうか、または最初の数バイトで操作できるかどうかを確認してください。私はそれらのライブラリを使用していません:)
また、いくつかの Java ライブラリと、検出の基礎となるいくつかの論文もリストされているこのページもチェックしてください。
気に入ったものが見つかったら、フィードバックをお忘れなく!
サードパーティのライブラリは必要ありません。書かなければならないコードは単純です。
アップロードを処理している時点で、ファイルを拡張子でフィルタリングします。これは完全ではありませんが、ほとんどの場合を説明します。
ただし、これは、ファイルが既にサーバーにアップロードされていることを意味します。クライアント側で少しの JavaScript を使用して同じ操作を実行できます。ファイル アップロード コンポーネントの値に許可されたファイル タイプが含まれているかどうかを確認します - .jpg
、.png
など。
function extensionsOkay(fval) {
var extension = new Array();
extension[0] = ".png";
extension[1] = ".gif";
extension[2] = ".jpg";
extension[3] = ".jpeg";
extension[4] = ".bmp";
// No other customization needed.
var thisext = fval.substr(fval.lastIndexOf('.')).toLowerCase();
for(var i = 0; i < extension.length; i++) {
if(thisext == extension[i]) {
$('#support-documents').hide();
return true; }
}
// show client side error message
$('#span.failed').show();
return false;
}