Disallow img tag in comments?

时间:2013-09-11 作者:psot

我一直在寻找一种方法来阻止人们在评论中发布外部图像,我

<img alt="my photo" src="http://example.co.uk/pic.jpg" />
并显示图像,无需所有者的许可。这在核心的某个地方是硬编码的,但我找不到一种方法来消除这种行为。谢谢

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您可以很容易地剥离显示的图像。

add_filter(
  \'comment_text\',
  function($comment) {
    $allowed_html = array(
        \'a\' => array(
        \'href\' => array(),
        \'title\' => array()
      ),
      \'br\' => array(),
      \'em\' => array(),
      \'strong\' => array()
    );
    return  wp_kses($comment, $allowed_html);
  }
);
这将删除所提供数组中未列出的所有标记。要专门剥离带有外部源链接的图像,您需要更复杂的东西。

function strip_external_images($match) {
  if (empty($match)) return;
  $site = parse_url(get_site_url());
  $parsed = parse_url($match[1]);
  if (empty($parsed[\'host\']) || $site[\'host\'] !== $parsed[\'host\']) {
    return \'\';
  } else {
    return $match[0];
  }
}

add_filter(
  \'comment_text\',
  function($comment) {
    $pattern = \'|<img.*src="([^"]*)"[^>]+>|\';
    return preg_replace_callback($pattern,\'strip_external_images\',$comment);
  }
);
这应该允许用户将图像添加到评论中,但只能将图像托管在与站点本身相同的域中。

SO网友:psot

我在您的第一个函数中添加了iframe,以允许从youtube和instagram等网站进行嵌入。我想这是一种安全的方式?现在它按预期工作。我不确定你的第二个函数完成了什么,不管有没有它,最终结果都是一样的。也许我对我最初的问题中想要实现的目标还不够清楚?非常感谢你。我会接受你的回答。

add_filter(
\'comment_text\',
function($comment) {
$allowed_html = array(
    \'a\' => array(
        \'href\' => array(),
        \'title\' => array()
        ),
    \'br\' => array(),
    \'em\' => array(),
    \'strong\' => array(),
    \'iframe\' => array(
        \'src\' => array(),
        \'height\' => array(),
        \'width\' => array()
        ),
);
return  wp_kses($comment, $allowed_html);
}
); 

结束