WordPressで本文にJavaScriptコードの入力が出来るのは管理者と編集者のみ
普段WordPressはブログサイトとして、「個人(管理者権限)アカウント」のみで運営しているので気づかなかったのですが、どうやら本文(ここの入力欄)にJavaScriptコードを記述することが出来るのは、管理者と編集者権限を持つユーザーのみだとわかりました。
WordPressでテーマを作成する際に、どのようにしてエスケープ処理をしていこうか考えている際に、そもそも本文にJavaScriptが入力出来てしまうのが危険なのでは無いかと考えました。
そこで、本文中からJavaScriptコードを削除することが出来ないかを探していたところ、こちらの記事を見つけました。
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 コードの投稿を許可。
注: 信頼できないユーザーに対してこのオプションを有効にした場合、悪意のあるコードや不正な形式のコードを投稿されるかもしれません。
実際、管理者権限、投稿者権限でそれぞれ試してみましたが、
<script>
alert("Hello!!");
</script>
<a href="javascript:alert('Hello!!')">Click Me!!</a>
<input type="button" value="Click Me!!" onclick="alert('Hello!!')">
alert("Hello!!");
<a href="alert('Hello!!')">Click Me!!</a>
JavaScriptコード以外にも、そもそも
input
タグも許可されていないようです。恐らくこれはwp_kses_post()
によって使用許可されていないHTMLタグが削除されているからであろうと思われます。
ということは、投稿者はiframe
タグを用いたYouTube動画の貼り付けも出来ませんね。
個人サイトでは問題無いですが、複数人のライターが使用するサイトになると、この辺りはカスタマイズが必要になるでしょう。
WordPressでホームページを制作しつつ、休日は畑を耕したりDIYを楽しんでいます。
コメントをどうぞ