Data Validation
go main content

ワードプレスをカスタマイズしよう

Expandmenu Shrunk

Data Validation

htmlとして出力するデータのサニタイズ

head line

オプション値

<?php sanitize_option( $option, $value ); ?>

整数値

  • intval($int)
  • absint($int)

HTML XML

  • ent2ncr( $text )
    • HTML実体参照を数値参照(10進数)に置換 してreturn

エレメントの許諾

  • wp_kses( (string) $fragment, (array) $allowed_html, (array) $protocols= null )

用例

たとえば、strip_tags()なら
wp_kses

テキストノードのサニタイズ

  • esc textarea
    • $safe_text= htmlspecialchars( $text, ENT_QUOTES );を返す
  • esc_html( $text ) (since 2.8)
    • UTF8のチェックをして、_wp_specialchars ENT_QUOTES シングルクウォートを’&#039;’へ
    • less than, greater than, ampersand, double quote, single quote
  • esc_html__ (since 2.8)
    • 国際化
  • esc_html_e (since 2.8)
    • 国際化
  • function wp_specialchars_decode( $string, $quote_style= ENT_NOQUOTES )
    • 戻す
  • shortcode_unautop($pee)
  • function wpautop($pee, $br= 1)
    • Replaces double line-breaks with paragraph elements.
  • function wptexturize($text)
    • no_texturize_tags hook
    • no_texturize_shortcodes hook

style アトリビュートのサニタイズ

以下のような、スタイル属性に記述されたスタイルのバリデート

    • safecss_filter_attr($css);

以下のプロパティが、デフォルトで許可されているので、CSS3な場合は、適宜追加の事

html アトリビュートのサニタイズ

  • esc_attr( $text )
    • UTF8のチェックをして、_wp_specialchars ENT_QUOTES シングルクウォート→’&#039;’
  • esc_attr__
  • esc_attr_e

ヌル文字

  • wp_kses_no_null()

javascript

  • esc_js( $text )

用例

URL

  • esc_url( $url, (array) $protocols= null ) (since 2.8)

  • esc_url_raw( $url, (array) $protocols= null ) (since 2.8)

esc_url()とesc_url_rawの違いは、

esc_url()は、第三引数を使用しない場合、

wp_kses_normalize_entities()で、& を &amp;に置換

&amp;を&#38;に ’ を&#039;に置換する。

esc_url_raw()は、この置換置換の工程が省かれる データベースにURLを保存するような場合に使う。
URLに?や#、/が含まれる場合は、http://プロトコルが追加されるが、
//から始まるプロトコルレスURLは、サポートされている

  • urlencode_deep( $array )

  • function utf8_uri_encode( $utf8_string, $length= 0 ) {

  • wp_sanitize_redirect()
    • エスケープ処理されたNULL文字や改行コード除去

MySQL

LIKE演算子で使われるワイルドカード% and _をエスケープする

  • function sanitize_sql_orderby( $orderby )

Filesystem

  • validate_file( (string) $filename, (array) $allowed_files= “” )

ファイル名

sanitize_file_name( $name )

HTTP Headers

wp_redirect($location, $status= 302)

wp_safe_redirect($location, $status= 302)

  • wp_sanitize_redirect( string $locaution )

Slug

  • function sanitize_title($title, $fallback_title= ”)
    • strip_tagsして、タイトルがなければ、fallback_title を return
    • 日本語文字列は、urlencodeされます

user name

sanitize_user( $username, $strict= false )

    • バイナリ値、数値文字実体参照、連続スペースの除去、return

バランスタグ

balanceTags( $html ) or force_balance_tags( $html )

タグエスケープ

  • tag_escape( $html_tag_name )
    • a-z _ : 以外を削除して小文字化して return

メールアドレス

  • is_email( $email_address )

パス

  • wp_normalize_path( string $path )

http://codex.wordpress.org/Data_Validation

  • wp_make_link_relative()
    • http://www.example.com/hogeを、/hogeに置換 return
  • wp_parse_str() [クエリ形式の文字列を、$arrayに変換]
  • wp_sprintf(sprintfの hook付き)
  • wp_html_excerpt()
  • wp_strip_all_tags()
  • wp_filter_nohtml_kses( $data )
    • CSS等の処理
  • links_add_base_url [wp_make_link_relative()をabsolute URLに]
  • function links_add_target( $content, $target= ‘_blank’, $tags= array(‘a’) )[Adds a Target attribute to all links in passed content.]
  • function wp_strip_all_tags($string, $remove_breaks= false)
    • style scriptタグも除去します。
  • function sanitize_text_field($str)
    • Sanitize a string from user input or from the db
  • capital_P_dangit( $text )
    • WordPressをWordPressに置換するだけ
  • make_clickable($ret) [Convert plaintext URI to HTML links.]

余談

WordPressは、ユーザー権限によって、利用できるタグやアトリビュートが異なりますが、その仕組みは、以下を参考に

wp_includes/kses.php

翻訳 国際化 gettext

翻訳ファイルの、ja.moはテキストファイルではないため、不正なコードなどが混入していても、発見が遅れやすい。
したがって、翻訳テキストはエスケープしたほうが、安全ですが、長ったらしいコードになりがちなので、ワードプレスは、エスケープを含んだ関数を準備している



コメントは受け付けていません