PHP [Img] BBCode, но отображать только если изображение является реальным изображением? - PullRequest
0 голосов
/ 19 марта 2012

На моем веб-сайте я включил BBCode на своем форуме, однако некоторые из моих пользователей использовали это и делали источником изображения страницу, которая дает пользователю "очки уважения". Мне было интересно, может ли быть способ проверить, является ли URL-адрес внутри тега [img] реальным изображением, а не просто веб-страницей. Я думал, что функция «getimagesize» могла бы быть здесь полезной, но я не могу найти правильный способ проверить, является ли это реальным изображением И уметь ли потом анализировать его с помощью регулярного выражения. Я бы предпочел не просто проверять расширения файлов, потому что некоторые изображения не имеют расширений файлов на моем сайте. Любое понимание этого?

1 Ответ

0 голосов
/ 19 марта 2012

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-адресам.

...