任意のパラメータを保存したり、処理したりしないでください。ユーザの投稿データを受け取るページは、どのパラメータを期待するか、どのフォーマットにするかを正確に把握しておく必要があります。
まず、それぞれの期待されるパラメータを検証し、検証がパスした場合 - スパムロボット基準を除いて - 検証されたパラメータを使用して、そのオブジェクトをセッションに保存します。キャプチャが成功すれば、それを取り戻すことができます。
あなたのコメントに応答して、編集
:セキュリティPOVから、あなたが高すぎるレベルで、建築家にあなたの関数をしようとしています。 「地元の知識」を持たないことで、選択肢はありませんが、セキュリティ上の問題を解決することができます。メソッド呼び出しをより低いレベルで導入する方法について考えてみましょう。
はここで緩く例を働いています:
は、各ページ/コントローラ/アクション/何でも、各アクションは、あなたのスパムボットフィルタを呼びましょう、(唯一のローカルコードは、それが自分のデータだ検証する方法を知っている)最初に自分のデータを検証してみましょう/リダイレクトコンポーネント/メソッドを使用して、スパムチェックする必要があるフィールド名と一緒に保持する有効なフォームデータを渡します。
あなたの方法では、潜在的な問題フィールドをスパムチェックし、データを保持して、re-captchaにリダイレクトすることができます。
擬似コードでは、スパムチェックが必要な各Webアクションでは、以下のようなことができます。 1つのメソッドコール などが必要です。
void someAction(untrustedData) {
trustedData = object;
trustedData.id = makeInt(badData.id);
trustedData.name = safeCharsOnly(untrustedData.name);
trustedData.message = safeCharsOnly(untrustedData.message); # <-- spam-check this
fieldsToSpamCheck = ['message'];
successUrlBase = '/myapp/sandwiches/postMessage';
if (!spamChecker.check(trustedData, fieldsToSpamCheck, successUrlBase)) {
// spamChecker will check specified params
// if not spam, it returns true
// if spam it sets a http redirect and returns false
return;
}
processData(trustedData);
}
あなたは* *する必要はありませんが、それは遠く好適サーバー側でのみ検証され、期待されるデータを保存することです。悪意のあるユーザーがポストにメガバイト(またはそれ以上)のデータを送信する可能性があります。また、数百(またはそれ以上)の異なるパラメータを送信することもできます。そのデータには、ログファイルビューアやセッションキャッシュエンジンなどの脆弱性を悪用するように設計された悪質な文字列が含まれる可能性があります。絶対にユーザー提供のデータを信頼し、それを未テストに保管してください。 – Cheekysoft