2011-01-15 15 views
2

私はクライアント側のユーザ設定マネージャを持っています。設定はWebサービスを通じて保存されます。私はそれらをjsonに直列化しています。 jsonは送信する前に操作できるので、私はそれをサーバー上で検証したいと思います。ユーザ入力セキュリティ.net

ベストプラクティスとは何ですか、私は何を探す必要がありますか? デシリアライズ前に検証しますか?ユーザーはどのような悪意のある入力を使用できますか?彼はjsonを操作して、デフォルトのasp net javascriptデシリアライゼーションを使用して非直列化で何とか私に害を及ぼすことができますか?

var userinput = { param1 : "test", categories : ["2312", "4324", "2122"] } 

これはサーバーに送信され、シリアル化されます。 サーバー上でオブジェクトグラフに逆シリアル化されます。

public class usersettings 
public property param1 as string 
public property categories as string() 
end class 

param1は大文字と小文字を区別して、大文字と小文字を区別して、大文字、例えば最大10文字で始まります。 カテゴリは10以上では異なる必要があります。

usersettingsclassは、SQL Serverに直接プッシュされるlinq to sql generetedオブジェクトです。

これはすべて非常に簡単なサンプルです。ユーザーの入力には何でもかまいません。

+1

デシリアライゼーションの危険性に関する苦境以外は、おそらく環境などの面でより具体的なものにする必要があります。 +1の質問です。 –

+0

は、それがどれほど複雑で安全であるかによって異なります。 oauthを使うのはどうですか? http://oauth.net/ – melaos

+0

多くは、デシリアライズライブラリに依存します。 – CodesInChaos

答えて

0

これらの設定は機密保護されていますか?ユーザーがそれらを使いこなすとどうなりますか?

例外が発生する可能性がある場合は、迷惑をかけないでください。

これらの設定でセキュリティが損なわれる可能性がある場合は、で暗号化されていない限り、クライアントに送信される前にクライアント側にしないでください。サーバー言い換えれば、スケーラビリティ上の理由からのみ、クライアント側で「操作」されているわけではなく、クライアントによって操作されているわけではありません。

これらの設定がセキュリティに敏感な場合、はクライアントによって変更可能である必要があります。もしjavascriptがそれらを変更することができれば、ユーザーもそうすることができます。

最後に、クライアントが何らかの形でjsonデータを操作してデシリアライゼーション例外が発生すると心配している場合は、jsonライブラリに脆弱性が存在するかどうかを調べる必要があります。もしそうでなければ、彼らがなるまでそれについて心配しないでください。

組み込みのASP.NETライブラリを使用していると言われているので、私はこれらのlibsの既知の強要性に気づいていないと言えるでしょう。

+0

私はこの設定を使用して、ユーザーが自分のプレゼンテーションプロファイルを操作できるようにしています。しかし、私は左のナビゲーションメニューのようないくつかの規則を持っています、そこに最初の要素でなければならず、そこに一度しかないかもしれません。ユーザーは、10個のナビゲーション項目のうち、10個または2個だけを表示すると言うことができますが、2個は最小です。 私はServerで、jsonをオブジェクトに解析し、いくつかの値チェッカーを使用し、許可されているプロパティー名のみを許可し、許可されているタイプのみを渡します。ほとんどの場合、ブール値、整数、基本文字列のみを使用します。 1つの小さなミスステイクで、何もしない。 – Luke