2011-07-29 15 views
2

私は、XSSの保護をどこに置くのが最適なのか、私たちのウェブサイトに疑問を抱いています。 Googleのチームはフロントエンドチームとバックエンドチームに分かれており、異なるプラットフォームを使用しているため、2つのグループのAPIとしてRESTを使用しています。私たちには、保護すべきHTMLのサブセットを保持できるフィールドがあり、これをどのレイヤーで行うべきか疑問に思っていましたか?REST WebサービスとXSS保護をどこに置くか

ウェブサービスによってデータベースに登録することはできませんか、または出庫中に消費者が検証して安全を確保する必要がありますか? HTMLを含めることができないフィールドの場合、我々は生の入力として保存し、プレゼンテーションの前にフロントエンドをエスケープしています。

私の見解では、誰かが許可されていないタグを使用しようとすると、データが無効であると回答する必要があります(私たちは無効な更新を示すために422を使用しています)。私は他の人が何を考えているのだろうと思っています。

答えて

1

おそらく/またはどちらでもありません。 Webサービスは、潜在的に多くのUIから呼び出すことができ、時間の経過とともに変化します。すべての呼び出し元が注意深く/信頼されていると想定すべきではありません。実際、誰かが直接手作業であなたのサービスを呼び出すことができますか?

しかし、ユーザビリティのために、UIでの妥当性検証とエラー報告を行うことがよくあります。私はちょうどフィールドに非英数字が含まれている場合、サービス層のbarfsのWebサイトでオンラインフォームを記入し終えました。 だから UIが3ページの入力後にリクエストを拒否するのではなく、入力のポイントを検証していればもっと良いでしょう。

(ウェブサイトは、雇用者の名前をお願いします、と名前が実際にあなたが少しは窮地に立たさ思われるアポストロフィが含まれている場合、ことは言うまでもありません!)

0

あなたは両方を使用する必要があります。典型的なパターンは途中で恐ろしいデータを浄化しようとすることです(そして、あなたは与えられた値に対して浄化が必要な場合には本当に要求を拒否しなければなりません)。

前者の理由は、エンコーディングが見逃されることがあるためです。後者の理由は、データベースをデータのソースとして信頼できないためです(人々はあなたのクライアントにぶつかることなくアクセスすることができ、クライアントは何かを逃した可能性があります)。

関連する問題