2012-04-24 4 views
0

これは不吉な質問のように思えるかもしれませんが、ユーザー入力の消毒は私を常に混乱させます。私は決して確定的な答えを得たいと思います。隠しフォーム要素のhtmlentities

だから、HERESにシナリオ

  1. お客様は、Webフォームに入力。
  2. PHPは、必須フィールドが適切に記入されているかどうかチェックします。
  3. もしそうなら、確認のためにユーザー入力が画面に表示され、入力データは隠しフォーム要素としても格納されます。
  4. お客様は、入力を確認した後、隠し要素をさらに処理するために送信します。

データが最後までエスケープされてはならないという原則に基づいて、ポイント3の隠し要素に格納されたデータにどのように適用されますか?(明らかに、この時点でスクリーンに印刷されたデータは適用されたhtmlentities()も

htmlentitiesを隠し要素で使用する必要がありますが、これは技術的にはパート4の後の最後の段階ではありません。これをDBまたは電子メールに貼り付ける前に再び変数を使用します。

私はこれを完全に間違っている可能性があることを十分に認識しているので、いかなる考えも大歓迎です。^_^

答えて

2

ユーザーの入力をページに書き出す場合は、常にエスケープする必要があります。そうでなければ、人々がjavascriptなどを入力に追加したり、隠れたフィールドから抜け出してコードをページに挿入したりするのを止めることはできません。だから、隠しフィールドでもhtmlentitiesを使用してください。ユーザーがそれらを見ることができないだけで、人々がコードを注入するのを妨げることはありません。

+0

私は思っていたが、それは私がラインの下でさらに問題を引き起こす原因になりませんでしたか? O'Maleyのような名前を持つことは、DBに入る前にO \ 'Maleyのように終わるのと同様に? – cosmicsafari

+0

htmlentitiesを使用している場合は、単一引用符をエスケープしません。 "and <(それはそうするmySQLエスケープ関数です)のようなhtmlのものです。私はPHPを頻繁に使用しないので100%フォームを送信すると、エスケープされたhtmlentities()エスケープフィールドはエスケープされていないテキストとして返されますか?それらがエスケープされていない場合は、データベースに貼り付ける前にエスケープする必要があります。 – Tim

+0

htmlentitiesがそれをやろうとするかどうかは分かりませんでした。ありがとう、私は今、十分に作業していると思います。 – cosmicsafari

関連する問題