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()なら
https://codex.wordpress.org/Function_Reference/wp_kses(b:wp_kses)

*テキストノードのサニタイズ
-http://codex.wordpress.org/Function_Reference/esc_textarea(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 )

sanitize_email()

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.]

sanitize_html_class($class, $fallback = ”)

sanitize_key()
sanitize_meta()
sanitize_mime_type()
sanitize_option()
sanitize_post_field()
sanitize_title_with_dashes()
–Sanitizes title, replacing whitespace with dashes.
sanitize_title()
sanitize_title_for_query()

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

wp_includes/kses.php

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



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