web-dev-qa-db-ja.com

ユーザー入力をサニタイズする方法

データベースに送信する前にフォームデータをサニタイズする正しい方法は何ですか?次のようなテキストを入力しました。

<form method="post" action="options.php">
    <?php wp_nonce_field('update-options'); ?>

<input style="width:100%" type="text" name="data[title]" id="title" value="<?php $title = get_option('data_test'); echo $title['title']; ?>" /></p>

    <input type="hidden" name="action" value="update"/>
    <input type="hidden" name="page_options" value="lu_ban_data"/>
    <input style="float:left;margin-top: 10px; margin-bottom: 10px; vertical-align: middle; clear: both;" class="button-primary" type="submit" value="<?php _e('save changes') ?>" />
</form>

私はecho sanitize_text_field($title['title']);をやろうとしました、しかしそれはdbからそれを要求するときにデータを消毒するだけです、dbの中のデータはまだ不必要な文字を含みます。これが私がそれを提出する前に消毒したい理由です。

1
David Garcia

これが参考になるかどうかはわかりません。 s_ha_dumが言ったように、送信したデータをどのように処理してdbに送信しているかを投稿する必要があります。

しかし、初心者にとっては、出力されたデータを次の形式でエスケープすることを検討してください。

<input style="width:100%" type="text" name="data[title]" id="title" value="<?php $title = get_option('data_test'); echo esc_attr($title['title']); ?>" /></p>

追加するデータには、 esc_attr() および esc_html() を使用してください。ユーザーによって送信されたページへのリンクです。

esc_attr()は、htmlタグ属性に出力されるコンテンツのためのもので、esc_html()は、ページ内またはタグ間に直接出力されるコンテンツのためのものです。翻訳が必要な場合は、esc_attr_e()esc_attr__()esc_html_e、およびesc_html__()バージョンもあります。

最後に、エスケープ系列の中には、データベースに送信しようとしているユーザー送信データ用の esc_sql() があります。

編集

@Miloがコメントで指摘したように、ここでesc_sql()を使用することはあまりありません。それらのエスケープ関数は、sanitize_option()関数を介してupdate_option()にすでに適用され、データベースに配置されるときに準備されるためです。だからあなたはそれをスキップすることができます。あなたがデータを保存するためにあなた自身のMySQL呼び出しを書いているなら、あなたはそれらをエスケープするために$ wpdb-> prepareを見るべきです。

組み込み関数を使用してmeta_dataとオプションをデータベースに追加する方法については、すでに説明しました。

2
Jake