ユーザ名が地味にバレるWordPressのcomment authorを変更する

WordPressのコメント欄に書かれた管理者のログインユーザネームを「書き換える」または「消す」方法のご紹介です。外部からのアタックに使われるセキュリティホールなので一刻も早く対策しましょう。

ユーザ名が地味にバレるWordPressのcomment authorを変更する

WordPressのコメント欄って、管理人が書き込んだ場合にログインネームがクラス名として第三者から見える仕様になってますね。

中の人だけ特別な表示にしたり色々と遊べるのかも知れないけど、めちゃくちゃセキュリティーホールなので本当やめて欲しいです。

…とか文句言ってても始まらないので一刻も早く手直ししましょう。

コメントリストにクラスとして付与される著者情報

コメント欄のliリストタグにはCSSで振り分けられるように様々なクラスがつけられています。中でも著者にはクラス名としてユーザネームがつきますね。(ゲストさんは特に身バレするような情報は表に出てきません。)

そこに、こんな感じでログイン名が表示されます。

【class情報】
class="comment byuser comment-author-xxxxxxxxxx bypostauthor even thread-even depth-1"

他人を疑わない無垢な仕様ってのも困ったものです。

comment-template.php の comment_class()が怪しい

コメント関連ということで comment-template.php を覗いてみます。

/wp-includes/comment-template.php

“comment-author-” でファイル内検索すると、365行付近にそれらしいコードがありました。

【comment-template.php】
$classes[] = 'comment-author-' . sanitize_html_class($user->user_nicename, $comment->user_id);

wp_usersテーブルから登録ユーザIDを取ってきて、ニックネームを突っ込んでるようです。

comment-author-を好きな文字列に変える

該当箇所を丸ごと消しても良いんですけど、せっかくなので好きな名前に書き換えてしまいましょう。コアファイルはそのままにして、function.phpに上書きする関数を作ります。

【function.php】
function ozChange_comment_author_class( $classes ) {
  foreach( $classes as $key => $class ) {
    if(strstr($class, "comment-author-")) {
      $classes[$key] = 'comment-author-' .'任意の文字列';
    }
  }
  return $classes;
}
add_filter( 'comment_class' , 'ozChange_comment_author_class' );

処理が雑で済みません。マルチユーザ環境の場合はユーザID見て振り分けることになるのかな。

display_nameの設定

バリエーションとしては、ログインユーザを保持する wp_users テーブルにある display_name ってフィールドも使えそうです。ダッシュボード側で任意名称のユーザ属性を増やせるので、それ使うと良いかも知れません。

ダッシュボード > ユーザー > あなたのプロフィール > ブログ上の表示名

comment-author-xxx そのものを消したい

文字列を書き換えても依然として byuser や bypostauthor は残ります。

つまり少なくとも登録ユーザとゲストの見た目を分けることは可能なので、小規模サイトだったら comment-author-xxx そのものを消してしまっても良いのかも。

【function.php】
function remove_comment_author_class( $classes ) {
  foreach( $classes as $key => $class ) {
    if(strstr($class, "comment-author-")) {
      unset( $classes[$key] );
    }
  }
  return $classes;
}
add_filter( 'comment_class' , 'remove_comment_author_class' );

Small Security Hole in WordPress Comments • bavotasan.com

WordPressコメント欄の著者情報を変えてみた

参考にしたサイトのタイトルが「スモールセキュリティホール」であるとおり、ログインネームの漏洩は侵入の糸口になり得ます。特に広く使われてるWordPressはクラッカーに狙われやすいので何らかの対策をしておきたいところ。

それにしてもWordPressを本格的に使うようになって、色んな人がメンテナンス記事ばかり書いてる意味が良く判りました。エラー対応と仕様変更対応に追われて、メインの科学ネタを書く暇が全然ないです。( ○ Д ○ )