WordPressで本文にJavaScriptコードの入力が出来るのは管理者と編集者のみ

作成日:

普段WordPressはブログサイトとして、「個人(管理者権限)アカウント」のみで運営しているので気づかなかったのですが、どうやら本文(ここの入力欄)にJavaScriptコードを記述することが出来るのは、管理者と編集者権限を持つユーザーのみだとわかりました。

WordPressでテーマを作成する際に、どのようにしてエスケープ処理をしていこうか考えている際に、そもそも本文にJavaScriptが入力出来てしまうのが危険なのでは無いかと考えました。
そこで、本文中からJavaScriptコードを削除することが出来ないかを探していたところ、こちらの記事を見つけました。

favicon
disable <script> tags on wordpress text editor https://wordpress.stackexchange.com/questions/285333/disable-script-tags-on-wordpress-text-editor

I am trying to prevent from Cross Site Scripting vulnerabilities. For that I have to make sure that it is not possible to insert JavaScript code directly via the editing functionality on Text edito...

(日本語訳)
質問:

クロスサイトスクリプティングの脆弱性を防ごうとしています。そのためには、テキストエディタの編集機能を使ってJavaScriptのコードを直接挿入できないようにしなければなりません。私はテキストエディタ上でHTMLとCSSコンテンツのみを追加できるようにしたいのですが、ワードプレスのテキストエディタでJavaScriptコードの挿入を無効にする方法をご存じですか?ありがとうございます。

返答:

WordPress はすでに、unfiltered_html 機能を持たないユーザーに対して、エディタでの JavaScript の使用を禁止しています。デフォルトでは、Administrator ロールと Editor ロールのみがこの機能を持っています。必要であれば、エディタのユーザーからもこの機能を削除することができます。(管理者はプラグインをインストールしたり、好きなコードを実行したりすることができるので、管理者から削除しても意味がありません)。

なるほど
ガッテン!

どうやらWordPressでは、unfiltered_htmlの設定で、信頼性の低いユーザー(投稿者以下権限)にはJavaScriptコードを記述出来ない仕様になっているようです。

バージョン 2.0 より導入
HTMLマークアップ、またはページ、投稿、コメント内への JavaScript コードの投稿を許可。
注: 信頼できないユーザーに対してこのオプションを有効にした場合、悪意のあるコードや不正な形式のコードを投稿されるかもしれません。

ユーザーの種類と権限 - WordPress Codex 日本語版

実際、管理者権限、投稿者権限でそれぞれ試してみましたが、

HTML 管理者権限
<script>
alert("Hello!!");
</script>

<a href="javascript:alert('Hello!!')">Click Me!!</a>

<input type="button" value="Click Me!!" onclick="alert('Hello!!')">
HTML 投稿者権限
alert("Hello!!");

<a href="alert('Hello!!')">Click Me!!</a>
のように投稿者権限では投稿保存時にフィルタリングがかけられて、JavaScriptコードは削除されていました。
JavaScriptコード以外にも、そもそもinputタグも許可されていないようです。

恐らくこれはwp_kses_post()によって使用許可されていないHTMLタグが削除されているからであろうと思われます。
ということは、投稿者はiframeタグを用いたYouTube動画の貼り付けも出来ませんね。

個人サイトでは問題無いですが、複数人のライターが使用するサイトになると、この辺りはカスタマイズが必要になるでしょう。

物草 灸太郎
物草 灸太郎

WordPressでホームページを制作しつつ、休日は畑を耕したりDIYを楽しんでいます。

コメントをどうぞ

※ メールアドレスが公開されることはありません。