web-dev-qa-db-ja.com

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

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

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

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

しかし、ksesフィルターは100%安全ではないことを知っておくべきです。

8
onetrickpony

私はこれに対して別のアプローチを取った。 HTMLエンティティを使用してオプションをエンコードおよびデコードしました。確信が持てないことの1つは、これが、HTMLを危険にさらすことを駆り立てるための厄介な裏口となるかどうかということです。私は、管理者だけがとにかくテーマのオプションを編集するという事実に頼っていますが、多分私は素朴ですか?

オプションを保存したときの外観は次のとおりです。

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

そして、これは私がオプションを取得したときに見えるものです:

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

これはあなたの質問に対する完全な答えではありませんが、正しい方向を指している可能性があります:ここでコーデックスで詳しく説明されているように、<?php esc_textarea( $text ) ?>を試すことができます: http://codex.wordpress.org/Function_Reference/esc_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 />';
  }
?>
2
Amanda