私はPHPを介してアクセスしたい私のフォームにこの選択入力を持っています。これは、PHPのselect要素からオプションにアクセスする信頼できる方法ですか?
<div data-role='fieldcontain'>
<label for='fruits' class='select'>Favorite Fruits</label>
<select name='fruits[]' id='fruits' multiple='multiple' data-native-menu='false'>
<option value=''>Favorite Fruits</option>
<option value='1' selected='selected'>Apple</option>
<option value='2' selected='selected'>Banana</option>
<option value='3' selected='selected'>Cherry</option>
</select>
</div>
select要素に「果物[]」の名前を設定することにより、この作品:
// |$fruits| is an array
$fruits = $_POST['fruits']
をしかし、私は、フォームからのデータのクリーニングが心配です。投稿データを配列に渡すのは安全ではないようです。例えば、誰かがselect要素をFirebug経由でテキスト入力要素に変更し、私のプログラムに悪意のあるコードを入力するとどうなるでしょうか?私は決してhtmlspecialchars
と呼んでいません。
私のセキュリティ上の懸念はありますか?なぜ、なぜそうではないのですか?
はい、あなたの懸念事項は有効です。ユーザーの入力を信頼しないでください。ページに印刷する場合は、 'htmlspecialchars()'を使用してそれをサニタイズすることができます。DBに固執する場合は、mysql_real_escape_string()を使用するか、DBに相当するものを使用します(MySQLを使用しない場合)。編集:もちろん、あなたがやっていることは、データを配列に追加することです(クエリとして実行しないで、エコー:HTMLとして渡すか、 'eval'に渡すと、心配することはありません)。 – powerbuoy
htmlspecialcharsが文字列を受け入れるので、私は直接 'htmlspecialchars'と呼ぶことはできません –
すべての要素で' htmlspecialchars'を実行するにはどうすればいいですか? array_walk'を使用することができます:array_walk($ fruis、 'htmlspecialchars') '。 – powerbuoy