<form id="tellastory" method="post" action="">
<label for="fullname">Full Name </label>
<input id="fullname" name="fullname" type="text" maxlength="255" value=""/>
<label for="title">Title </label>
<input id="title" name="title" type="text" maxlength="255" value=""/>
<label for="title">Message </label>
<textarea id="editor" name="editor" rows="20" cols="50"></textarea>
<input type="hidden" name="form_id" value="123456" />
<input id="saveForm" type="submit" name="submit" value="submit" />
</form>
<?php
$storyteller_user_id = "3"; //your guest user id here
//$stories_category = "3"; //your stories category id here
$key = "storyteller";
if ($_POST['form_id']=="123456") {
$my_post = array();
$my_post['post_title'] =$_POST['title'];
$my_post['post_content'] = $_POST['editor'];
$my_post['post_status'] = 'publish';
$my_post['post_author'] = $storyteller_user_id;
$my_post['post_category'] = array($stories_category);
$post_Num = wp_insert_post( $my_post );
add_post_meta($post_Num, $key, $_POST['fullname']);
}
?>
サニタイズとエスケープは常にコンテキスト依存であり、私はこの分野のエキスパートではありません。とにかく私は最近自分自身でいくつかの 'リサーチ'をしました。究極の徹底的な答え(私もこれを読みたがっています)
Data Validation に関するコーデックスの記事は、よい出発点です。私は esc_html() が出力に最も使われる方法だと思います。
WordPress 3.1ではWPエスケープファミリへの新参者もいるようです - esc_textarea() 。
WordPressはいつものようにあなたの生活を楽にしようとしています - それで sanitize_title() や sanitize_user() のような既存のコンテキスト特有の関数をチェックするようにしてください。
さまざまな方法とそれらがどのように構築されるかについてもっと学ぶために wp-includes/format.php の中でいくつかのソースダイビングをして関数を通過することを私はあなたに勧めます。
最近、wpハッカーについても同様の議論がありました - 間違いなく読む価値があります。
WP-HACKERS:信頼できないユーザーからの入力を保存する 。私はこれに関するAndrew Nacinの意見をあえて引用します:
ここで一般化していること:サニタイズは保存時に行われ、ディスプレイ上でエスケープされるべきです。
つまり、kses、absint、esc_url_raw、sanitize_text_field、保存時に何がありましたか。それから、esc_url、esc_html、およびtexturizationなどを使用します。出力には何がありますかディスプレイ上でksesを実行するためのユースケースがあるかもしれません。場合によってはそれを行います。しかし、データが安全に入力されている限り、安全に出力されます。 (そうでなければ、それからあなたはより大きな問題を抱えている。)
まだもっと欲しいですか? ;)
コードの洞窟:WordPressのセキュリティ - 正しいプラグイン
Smashing Magazine:入力データのサニタイズによるWebユーザーの安全性の維持 _
素敵で安全な一日を過ごしてください。