2012-03-19 4 views
0

私のウェブサイトではBBCodeを私のフォーラムで有効にしていますが、私のユーザーの中にはこれを利用している人がいて、イメージのソースをユーザーに「敬意ポイント」を与えるページにしています。私は、[img]タグの内部にあるURLがウェブページだけでなく、実際のイメージであるかどうかをチェックする方法があるかどうか疑問に思っていました。私はここで "getimagesize"関数が便利かもしれないと思っていましたが、それが実際のイメージであるかどうかをチェックし、後で正規表現でそれを解析できる適切な方法を見つけることができません。私はいくつかの画像が私のウェブサイト上のファイル拡張子を持っていないので、ファイル拡張子をチェックするだけではない。これについての洞察?PHP [Img] BBCodeですが、画像が実画像の場合にのみ表示されますか?

+1

あなたは 'getimagesize()'を使うことができますが、それは.tiffイメージなどを含めることはできません。それはJPG、PNGだけをサポートし、私はBMPやGIFを考えています。画像のMIMEタイプに 'image /'が含まれているかどうかを見ることができます。 – Bojangles

+1

すべてのページのロード/リフレッシュで実際のイメージであるかどうかを確認する予定がある場合、それはあなたが考えることができる最悪のアイデアです。あなたの "Respect Points"スクリプトにsessionid/custom parameterチェックを追加するだけです。 – Shocker

+1

短い答え:できません。ホストは、リクエストがあなたから来ているかどうかをチェックし、そうであればあなたにイメージを与え、他のすべてをリダイレクトして投票することができます。この問題を解決する方法は、GET要求によるアクションを許可しないことです。 – Qtax

答えて

0

getimagesize()は行く方法です。それはTIFFだけでなく、ほぼすべての一般的なWeb画像形式をサポートしています。私が考えることができる唯一の例外はSVGです。

さらに、特定のページにアクセスしないようにブラックリストを設定する必要があります。ここ

<?php 
function validURL($url){ 
    $bad = array("respect.php","website.com","etc"); 
    /* Check each array element to see if it is in the URL */ 
    foreach($bad as $fail){ 
     if(strpos($url,$fail) !== FALSE){ 
      return false; 
     } 
    } 
    return true; 
} 

if(validURL($url) && getimagesize($url) !== FALSE){ 
    // Valid image 
} else { 
    // Strip url 
} 
?> 

キーがあること if文validURL()がfalseを返した場合、短い外になります。これにより、getimagesize()が不正なURLにアクセスできなくなります。

関連する問題