PHP[Img]BBCode,但仅当图像是真实图像时显示?

PHP[Img]BBCode,但仅当图像是真实图像时显示?,php,regex,image,bbcode,verify,Php,Regex,Image,Bbcode,Verify,在我的网站上,我已经在我的论坛上启用了BBCode,然而,我的一些用户一直在利用这一点,并一直将图片的来源变成一个给用户“尊重点”的页面。我想知道是否有办法检查[img]标记中的URL是否是真实的图像,而不仅仅是网页。我认为“getimagesize”函数在这里可能很有用,但是我找不到一种合适的方法来检查它是否是真实的图像,并能够在之后用正则表达式解析它。我不想只检查文件扩展名,因为有些图片在我的网站上没有文件扩展名。对此有什么见解吗?getimagesize()是一个不错的选择。它确实支持TI

在我的网站上,我已经在我的论坛上启用了BBCode,然而,我的一些用户一直在利用这一点,并一直将图片的来源变成一个给用户“尊重点”的页面。我想知道是否有办法检查[img]标记中的URL是否是真实的图像,而不仅仅是网页。我认为“getimagesize”函数在这里可能很有用,但是我找不到一种合适的方法来检查它是否是真实的图像,并能够在之后用正则表达式解析它。我不想只检查文件扩展名,因为有些图片在我的网站上没有文件扩展名。对此有什么见解吗?

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
}
?>


这里的关键是,如果validul()返回false,if语句将缩短。这将阻止getimagesize()访问任何恶意URL。

您可以使用
getimagesize()
,但不允许包含.tiff图像或类似内容;它只支持JPG,PNG和我认为BMP或GIF。您可以查看图像的MIME类型是否包含
image/
。如果您计划在每次页面加载/刷新时检查它是否为真实图像,那么这是您所能想到的最糟糕的想法。只需在“尊重点”脚本中添加一些sessionid/自定义参数检查。简短回答:不行。主持人可以检查请求是否来自您,如果是,则给您一个图像,同时重定向所有其他人进行投票。解决此问题的一种方法是不允许通过GET请求执行任何操作。