WordPressのプロフィール情報を改行して表示したい

WordPressのプロフィール情報を改行して表示したい

せっかく記事の下部にプロフィールが表示されるので軽く書いてみました。
サイドバーにも欲しいですが、スマホで見るならこっちの方が目につきやすいはず?

でも実際にプロフィールを編集してみたら…

あら改行出来ない。

編集画面だと改行自体は出来ていますが、実際のサイト上に表示される際はくっついて1行となってしまいます。

これなんで改行されないんでしょう?環境?
ということで個人的に推奨する解決策を。

とりあえず解決しましょう

なんでもいいから解決したい!


以下のコードを子テーマの「functions.php」にコピペし更新します。

add_filter( 'wp_kses_allowed_html', 'use_brtag', 10, 2 );
 function use_brtag( $tags, $text ) {
     if ( 'pre_user_description' === $text ) {
         $tags['br'] = true;
     }
     return $tags;
 }



コード追加後、プロフィール編集で改行を入れたい箇所に「<br>」タグを追加して更新します。



実際に表示してみると….反映されて改行されていますね。

これで解決です!

なんで「remove_filter」じゃないの?

他サイト等で一番多く見かけるのが「remove_filter」を使用する方法だと思います。自動整形機能を無効化して、結果的にbrタグをプロフィール編集欄で使えるようにする方法です。

確かにbrタグを使用して改行出来るし、目的は達成出来ます。


ただ試しに使ってみたところ、これセキュリティ的にどうなの?
という気持ちになったため別の方法にしました。

どうなの?という理由を実際に見ていきます。

XSS発火出来るようになっちゃいますよ!

脆弱性、セキュリティバグと呼ばれるものがあります。

様々な脆弱性がありますが、その中でも今回はXSSと呼ばれる脆弱性が確認出来たためどういった現象か確認していきます。


まず改行が出来ないデフォルトの状態ではXSSを発火することは出来ません。
XSSが発火出来てしまう要因となるのが、「remove_filter」で自動整形機能を無効化した場合です。


「add_filter」を適用した状態でXSS発火用コードを入力して


更新してみると、エスケープされてスクリプトタグなどは消え文字列のみ残ります。


もちろん、実際のサイト上でも。

これは問題ありませんね。


では「remove_filter」で自動整形機能を無効化するとどうなるのか?

同様に発火用コードを入力して更新してみると…
そのまま保存されちゃっています。


その状態で記事を作成し、プレビューしてみると?
画面上にアラートが出てしまいました。


これがXSSが発火する、という現象となります。

アラートの内容がどういったものか、という以前にまず発火する状態ということ自体が起こらないようにするのが理想です。


XSSが発火した際のプロフィール情報はどうなっているのか?

画面上には表示されていませんが、デベロッパーツールで確認してみるとしっかりスクリプトとして保存されていることがわかります。

これは俗に保存型XSSと呼ばれます。
スクリプトが保存されていて、ページを訪れる度に何度でも発火してしまうからです。
発火する画面でページを更新してみるとわかります。


まあ発火発火言っていますが、具体的な脅威はこの場合ではほぼないと言っていいと思います。
XSSのアラートが出た際に出る情報次第ではやばいですが、 もし発火してもこの場合はセッションIDの露出は属性によって制限されているため脅威としては低い、ということになります。

まとめ

使用しているWordPressのテーマにプロフィール改行の設定がなければ、おおよそこの方法で改行が可能となると思います。

機能面でもセキュリティ面でもそうですが、バグとして問題がある点は潰せるものは事前に潰すに限ります。

ただモノによってはセキュリティをガチガチにしてしまうとユーザの利便性が落ちてしまうことがあるので、間をとる良い感じの状態に出来れば良いですね。