2016-08-07 14 views
0

アップロードされたファイルがfavicon型であるかどうかを確認する必要があります。私はそれを安全な方法で行う必要があります。ファイルがPHPでファビコンであるかどうかを検出する方法は?

image/vnd.microsoft.icon

私はその値かどうかを確認することができます知っている:私は、入力ファイルを使用してファビコンファイルをアップロードし、$_FILES変数を印刷する場合

、私は変数は、以下のタイプの値を持っていることがわかりますそれにマッチするが、私はユーザーがそれをダンプできると思う。誰かが私にいくつかのヒントを与えることができたら、私は感謝するでしょう

+0

'Fileinfo'を使用してMIMEタイプを取得し、それをあなたの希望のMIMEタイプと比較してください。 http://php.net/Fileinfo –

+0

ご意見ありがとうございます。それを確認する安全な方法ですか?私は、ユーザーがそれを改ざんしていないことを確認したい。もしそうなら、答えとしてあなたのコメントを残すことができます。正しい答えとしてマークします。@CharlotteDunois –

+2

'このモジュールの関数は、ファイル内の特定の位置で特定のマジックバイトシーケンスを探して、ファイルのコンテンツタイプとエンコーディングを推測しようとします。ファイル。これは弾力的なアプローチではありませんが、ヒューリスティック手法は非常に良い仕事です。 '$ _FILES [...] ['mime'] 'に頼るよりはるかに優れています –

答えて

1

。icoファイル

$loader = new Elphin\IcoFileLoader\IcoFileService; 
try { 
    /** @var Elphin\IcoFileLoader\Icon $icon */ 
    $icon = $loader->fromFile('/path/to/icon.ico'); 

    //perform further inspection or render the icon as an image here... 

} catch (\Exception $e) { 
    //not an .ico file 
} 
+1

ありがとう!魅力的な作品! –

-1
  1. あなたのpngをicoファイルに変換するツールを使用してください。 "favicon generator"を検索すると、多くのオンラインツールを見つけることができます。
  2. 場所link -tagとheadでICOアドレス:あなたは、さまざまなツールを使用することができ

    <link rel="shortcut icon" href="http://sstatic.net/stackoverflow/img/favicon.ico"> 
    
+0

これはOPの回答ではありません質問に答えることさえしようとしません。 –

+0

申し訳ありませんが、私はそれを求めていません。私はファイルが安全な方法でファビコンであるかどうかを調べる方法を尋ねています –

2

のFileInfo

あなたはから直接FileInfoを使用することができますPHP:

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
echo finfo_file($finfo, 'the_file_to_check.ico'); 
// Should print something like 'image/x-icon' 
finfo_close($finfo); 

システムでFileInfoが設定されている場合、これはおそらく最も簡単な方法です。

ImageMagickの

ImageMagickのは埋め込み画像を一覧表示、実際にファイルの内容を復号化することによって歩進ん:(この例では、コマンドラインから呼び出された)

$ identify favicon.ico 
favicon.ico[0] ICO 16x16 16x16+0+0 32-bit sRGB 15.1KB 0.000u 0:00.000 
favicon.ico[1] ICO 32x32 32x32+0+0 32-bit sRGB 15.1KB 0.000u 0:00.000 
favicon.ico[2] ICO 48x48 48x48+0+0 32-bit sRGB 15.1KB 0.000u 0:00.000 

FileInfoがICOファイルとどのように動作するのかわかりませんが、ImageMagickはおそらくファイルのかなりの部分をデコードする必要があるため、おそらくより安全です。

ImageMagickは多くのフォーマットをサポートしているので、その戻りコードだけでなく出力を確認することが重要です(JPG、SVGなどでも成功します)。

IcoUtils

のImageMagickに軽量の代替として、IcoUtilsは、トリックを行うことができます。

$ icotool -l favicon.ico 
--icon --index=1 --width=16 --height=16 --bit-depth=32 --palette-size=0 
--icon --index=2 --width=32 --height=32 --bit-depth=32 --palette-size=0 
--icon --index=3 --width=48 --height=48 --bit-depth=32 --palette-size=0 

$ icotool -l not_a_favicon.svg 
favicon.svg: not an icon or cursor file (reserved non-zero) 

残念ながら、そのリターンコードは、実際にその出力を確認するためにあなたを強制的に、常に0です。

それはとのUbuntuにインストールすることができます:あなたはhttps://github.com/lordelph/icofileloaderは、構文解析のためのネイティブPHP方法を提供し、任意の外部ツールの使用を避けたい場合は

sudo apt-get install icoutils 
関連する問題