WordPress
WordPressのセキュリティ - エスケープ
サーチ…
構文
- esc_html(文字列$テキスト)
- esc_url(文字列$ url、配列$プロトコル、文字列$ _context)
- esc_js(文字列$ text)
- wp_json_encode(混合$データ、int $オプション、int $深さ= 512)
- esc_attr(文字列$ text)
- esc_textarea(文字列$ text)
備考
セキュリティは、開発時に常に留意する必要があります。セキュリティがなければ、アプリケーションはSQLインジェクション、XSS、CSRF、RFIなどのさまざまな攻撃に対して深刻な問題を引き起こす可能性があります。
信頼されていないデータは、多くのソース(ユーザー、サードパーティのサイト、独自のデータベース、...など)から来ており、すべてが入力と出力の両方で検証される必要があります。 (出典:WordPress Codex)
データは、用途と目的に応じて検証、消毒またはエスケープする必要があります。
検証するには、ユーザーに要求したデータが、送信したデータと一致することを確認します。 (出典:WordPress Codex)
サニタイズは、ユーザーデータを受け入れるアプローチの方が少し自由です。受け入れ可能な入力範囲がある場合、これらのメソッドを使用することに戻すことができます。 (出典:WordPress Codex)
エスケープするには、既に持っている可能性のあるデータを取り出して、エンドユーザー向けにレンダリングする前にデータを保護することです。 (出典:WordPress Codex)
HTMLコードでデータをエスケープする
esc_htmlは、HTMLコード内にデータを出力しているときはいつでも使用する必要があります。
<h4><?php echo esc_html( $title ); ?></h4>
URLをエスケープする
<a href="<?php echo esc_url( home_url( '/' ) ); ?>">Home</a>
<img src="<?php echo esc_url( $user_picture_url ); ?>" />
jsコードでデータをエスケープする
esc_js()
は、タグ属性内のインラインJSで使用するためのものです。
<script>
タグ内のデータには、 wp_json_encode()
使用します。
<input type="text" onfocus="if( this.value == '<?php echo esc_js( $fields['input_text'] ); ?>' ) { this.value = ''; }" name="name">
wp_json_encode()
は、JSONに変数をエンコードし、いくつかのwp_json_encode()
性チェックを行います。
wp_json_encode()
には文字列区切りの引用符が自動的に含まれることに注意してください。
<?php
$book = array(
"title" => "JavaScript: The Definitive Guide",
"author" => "Stack Overflow",
);
?>
<script type="text/javascript">
var book = <?php echo wp_json_encode($book) ?>;
/* var book = {
"title": "Security in WordPress",
"author" => "Stack Overflow",
}; */
</script>
または
<script type="text/javascript">
var title = <?php echo wp_json_encode( $title ); ?>;
var content = <?php echo wp_json_encode( $content ); ?>;
var comment_count = <?php echo wp_json_encode( $comment_count ); ?>;
</script>
エスケープ属性
<input type="text" value="<?php echo esc_attr($_POST['username']); ?>" />
テキストエリアのデータをエスケープする
<textarea><?php echo esc_textarea( $text ); ?></textarea>