web-dev-qa-db-ja.com

テーマオプションでのwp_editorの安全な検証

だから私はちょうどテーマ/プラグインのセキュリティについてこの素晴らしい WPSEスレッドを見つけました 。ほとんどの質問に答えましたが、新しいwp_editor()関数が構築される前に作成されました。

私のテーマオプションには2つのTinyMCEエディタがあり、テーマオプションを保存する前にバリデーションコールバックでesc_html()esc_textarea()のどちらを使う必要があるのか​​疑問に思います。私には、TinyMCEがそのことの大部分(およびその世話をするSettings APIセキュリティ)を担当しているようですが、wp_editor()に関するドキュメントはそれほど多くありません。

任意のリソースと回答をいただければ幸いです。

3
mrwweb

esc_html()esc_textarea()は、それらの名前にふさわしく、関数をエスケープし、実際にはサニタイズや検証よりも表示のためのものです。保存する前にwp_kses()フィールドからの入力をサニタイズするためにwp_kses_post()またはwp_kses()(これはグローバル$allowedposttagsを持つwp_editor()です)を使用します。

9
helenhousandi

TinyMCEには、許可されたすべてのタグ用のフィルタがあります。あなたはタグを変更することができ、そこにあなたのオプションの標準で設定されており、エディタはタグをフィルタリングします。保存後にフィルタリングする必要はありません。

拡張タグの例

function fb_change_mce_options( $initArray ) {
    // Comma separated string od extendes tags
    // Command separated string of extended elements
    $ext = 'pre[id|name|class|style],iframe[align|longdesc|name|width|height|frameborder|scrolling|marginheight|marginwidth|src]';
    if ( isset( $initArray['extended_valid_elements'] ) ) {
        $initArray['extended_valid_elements'] .= ',' . $ext;
    } else {
        $initArray['extended_valid_elements'] = $ext;
    }
    // set tiny paramter verify_html
    $initArray['verify_html'] = true;
    return $initArray;
}
add_filter( 'tiny_mce_before_init', 'fb_change_mce_options' );

タグをフィルタリングすることもできます。配列$initArray内のすべてのタグが許可されます。配列からタグを削除するのは簡単です。 unset( $initArray['pre'] )

var_dump( $initArray );を介して配列内の項目を読む

ベスト

6
bueltge