2012-03-19 5 views
0

내 웹 사이트에서 내 포럼에 BBCode를 사용할 수 있지만 일부 사용자는이를 악용하여 이미지 소스를 사용자에게 "존중 포인트"로 제공하는 페이지로 사용하고 있습니다. [img] 태그 안에있는 URL이 웹 페이지가 아닌 실제 이미지인지 확인하는 방법이 있는지 궁금합니다. 나는 "getimagesize"함수가 여기서 유용 할 수 있다고 생각했지만 실제로 이미지인지 그리고 정규 표현식으로 파싱 할 수있는 적절한 방법을 찾지 못했습니다. 일부 이미지는 내 웹 사이트에 파일 확장명이 없기 때문에 파일 확장명을 확인하는 것을 선호합니다. 이것에 대한 통찰력?PHP [Img] BBCode, 이미지가 실제 이미지 인 경우에만 표시 하시겠습니까?

+1

'getimagesize()'를 사용할 수는 있지만 .tiff 이미지 등을 포함 할 수 없습니다. JPG, PNG 만 지원하며 BMP 또는 GIF를 사용합니다. 이미지의 MIME 유형에'image /'가 포함되어 있는지 확인할 수 있습니다. – Bojangles

+1

모든 페이지로드/새로 고침시 실제 이미지인지 확인하려는 경우 생각할 수있는 최악의 아이디어입니다. "존경 포인트"스크립트에 약간의 sessionid/맞춤 매개 변수 체크를 추가하십시오. – Shocker

+1

짧은 대답 : 할 수 없습니다. 주인은 요청이 당신에게서 왔는지를 검사 할 수 있습니다. 그렇다면 다른 사람들을 투표로 리디렉션하면서 이미지를 제공 할 수 있습니다. 이 문제를 해결하는 방법은 GET 요청을 통해 어떤 작업도 허용하지 않는 것일 수 있습니다. – Qtax

답변

0

getimagesize()가 좋습니다. TIFF는 물론 모든 인기있는 웹 이미지 형식을 지원합니다. 내가 생각할 수있는 유일한 예외는 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에 액세스하는 것을 방지 할 수 있습니다.

관련 문제