web-dev-qa-db-ja.com

コメントにimgタグを許可しない

私は人々がコメントに外部の画像を投稿するのを止める方法をかなり長い間探してきました。

<img alt="my photo" src="http://example.co.uk/pic.jpg" />

所有者の許可なく画像が表示されます。これはコアのどこかにハードコーディングされていますが、この動作を解除する方法が見つかりません。ありがとうございます。

1
psot

あなたはかなり簡単にディスプレイ上の画像を取り除くことができます。

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);
  }
);

これにより、ユーザーはコメントに画像を追加できますが、サイト自体と同じドメインでホストされている画像のみが可能になります。

1
s_ha_dum

Youtubeやinstagramのようなサイトからの埋め込みを許可するためにあなたの最初の関数にiframeを追加しました。安全な方法だと思いますか。意図したとおりに動作します。私はあなたの2番目の機能が何を達成するのかわからない、最終結果はそれがあってもなくても同じです。私の最初の質問で達成したいことについて、私は十分に明確ではなかったのでしょうか。どうもありがとうございました。私はあなたの答えを受け入れます。

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);
}
); 
0
psot