【问题标题】:PHP [Img] BBCode, but display only if the image is a real image?PHP [Img] BBCode,但仅在图像是真实图像时才显示?
【发布时间】:2012-03-19 00:04:11
【问题描述】:

在我的网站上,我在我的论坛上启用了 BBCode,但是,我的一些用户一直在利用它,并且一直在将图像的来源设为一个页面,为用户提供“尊重点”。我想知道是否有办法检查 [img] 标签内的 URL 是否是真实图像,而不仅仅是网页。我在想“getimagesize”函数在这里可能很有用,但我找不到合适的方法来检查它是否是真实图像,并且之后能够用正则表达式解析它。我不希望只检查文件扩展名,因为有些图像在我的网站上没有文件扩展名。对此有何见解?

【问题讨论】:

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

标签: php regex image bbcode verify


【解决方案1】:

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

这里的关键是,如果validURL() 返回false,if 语句会短路。这将阻止 getimagesize() 访问任何顽皮的 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多