Asp.net MVCのQueryString値によるセキュリティ

asp.net asp.net-mvc query-string security

ユーザーがクエリ文字列値またはアクションURL値を改ざんされていないことをどのように正しく確認しますか。 たとえば、CommentControllerにCommentIDを受け取る[Delete Comment]アクションがあるとします。 アクションURLは、ID 3のコメントを削除するために/ Comments / Delete / 3のようになります。

誰もがコメント3を削除できるようにしたくないのは明らかです。 通常、コメントの所有者または管理者にそうする権限があります。 このセキュリティがさまざまな方法で実施されているのを見たことがあります。

複数のデータベース呼び出しを行ってコメントを取得し、コメントの作成者が削除アクションを呼び出すユーザーと一致することを確認しますか?

代わりにCommentIDとUserIDを削除を行うストアドプロシージャに渡し、UserIDとCommentIDが渡された値と等しい場所でDeleteを実行しますか。

クエリ文字列値を暗号化する方が良いでしょうか。

  5  3


ベストアンサー

あなたは違います。

ユーザー、ブラウザ、クライアントなどから来る入力を決して信頼しないことが、特に今日と時代においてプログラミングの基本的な規則です。

また、プログラミングの基本的な規則でもあるため、暗号化とセキュリティを自分で実装しようとしないでください。 そして、あなたが自分のしていることを知っていても、あなたはタードクラッカーの一歩先を行くことになるでしょう。 頭の良い人たちはまだあなたを笑わせるでしょう。

ログインユーザーが正しいアクセス権を持っていることを確認するために、追加のクエリを実行します。 それは皆の生活をそれほどずっと簡単にするでしょう。

17


クエリパラメータの暗号化と復号化は簡単なプロセスであり、ここでStackOverflowでHttpModuleを使用する方法の優れた例がいくつかあります。

“あなたはしない”、 “あなたはできない”、または “それは容易ではありません”はこの日と年齢では単に受け入れられない応答です…​

9


Vyrotek:入力方法は重要ではありません。 GET、POST、暗号化/難読化GET – 本当の違いはありません。 アプリケーションがコマンドを受け取る方法に関係なく、管理アクションを実行するには、発行元ユーザーが自分の望むことを実行できることを確認する必要があります。 コマンドが受信されてから実行されるまでの間に、許可の確認が行われなければなりません。 さもなければそれはまったく安全ではありません。

3


Stephen Waltherの記事 http://stephenwalther.com/blog/archive/2009/01/21/asp.net-mvc-tip-46-ndash-donrsquot-use-delete-links-because.aspxで説明されている手法を使用することを検討してください。ヒント#46 – [AcceptVerbs(HttpVerbs.Delete)]を使用するセキュリティホールを作成するため、Delete Linksを使用しないでください。

2


また、下のように[動詞の受け入れ]属性を使用して、[削除]要求に対する投稿要求のみを許可することもできます。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(int?) id){//削除}

その後、ここで説明しているように偽造防止トークンを使用することもできます。

1


私はファンキーなことでクエリ文字列を取得し、それを圧縮し、Base64にするか、または16進エンコードするだけなので、 “commentid = 4

それは基本的に「あいまいさによるセキュリティ」ですが、それはサイトをハックしようとしている誰かにとって多くの仕事をします。

0


簡単にはできません。

削除を行うためにアクションURLを使用したサイトの思い出が好きです。

彼らがイントラネットをクロールして検索を開始するまで、すべてが良かった。

おっと、さようならデータ。

私はあなたが編集したくないものにクエリ文字列を使わないような解決策をお勧めします。

0


タイトルとURLをコピーしました