オプション値にHTMLコードを保存するときにエスケープを防ぐ方法は?


9

私はユーザーがFacebookリンクなどの特定のオプションを追加できるテーマオプションページを持っています。オプションの1つは広告コード用で、オプションとして保存すると何度もエスケープされます。

<textarea>を使用して管理ページに挿入されたコードを保存するための最良のアプローチは何update_option( 'sidebar_code', $_POST['sidebar_code'] );ですか?

回答:


8
stripslashes(wp_filter_post_kses(addslashes($_POST['sidebar_code'])));

ただし、ksesフィルターは100%安全ではないことを知っておく必要があります。


2
100%安全でないとはどういう意味ですか?
Amit

彼らが本当にそれが得意であれば、誰かがあなたのサイトをまだXSSする可能性があるということです。最後のwpパッチでkses関数のxss脆弱性が修正されたのは間違いではない
onetrickpony

ksesはすべての余分なクラスとhtml属性(たとえば、class = "classname" width = "100")を取り除き、それを回避する方法はありますか?
Talon

11

私はこれに別のアプローチをとりました。オプションをHTMLエンティティでエンコードおよびデコードしました。私が確信していないことの1つは、これがHTMLを危険にさらすことを人々が推進するための厄介な裏口を開くかどうかです。とにかく管理者だけがテーマオプションを編集するという事実に依存していますが、おそらく私は初心者ですか?

オプションを保存すると、次のようになります。

update_option('my_option', htmlentities(stripslashes($_REQUEST['my_option'])));

そして、これは私がオプションを取得したときのようです:

html_entity_decode(get_option('my_option',htmlentities($my_default_value)));

2

これはあなたの質問に対する完全な答えではありませんが、おそらく正しい方向にあなたを向けています:<?php esc_textarea( $text ) ?>コーデックスで詳しく説明されているように、あなたは試すことができます:http : //codex.wordpress.org/Function_Reference/esc_textarea

私自身のメタボックスのtextareaスニペットは次のようになります:

<?php 
  if ( $meta_box['type'] == "textarea" ) {
    $meta_box_value = esc_textarea( get_post_meta($post->ID, $meta_box['name'].'_value', true) );
    echo '<textarea class="meta-textarea" style="width: 100%;" cols="20" rows="2" name="' . $meta_box['name'] . '_value">' . $meta_box_value . '</textarea><br />';
  }
?>

何をしているかによります。esc_textareaは、任意のhtmlをHTMLエンティティコードに変換するため、tinyMCEのようなリッチテキスト領域では使用できません。
ジェイク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.