5

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

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

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

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

クエリ文字列値を暗号化する方が良いですか?

4

7 に答える 7

17

あなたはそうしない。

特にこの時代では、ユーザー、ブラウザ、クライアントなどからの入力を絶対に信用しないことがプログラミングの基本的なルールです。

また、自分が何をしているのかを本当に理解していない限り、暗号化とセキュリティを自分で実装しようとしないこともプログラミングの基本的なルールです。そして、自分が何をしているのかを知っていても、タールクラッカーの一歩先を行くだけです。賢い人はまだあなたを笑うでしょう。

追加のクエリを実行して、ログインしているユーザーが適切な権限のセットを持っていることを確認します。そうすれば、みんなの生活がずっと簡単になります。

于 2008-10-29T02:11:45.003 に答える
11

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

「できない」、「できない」、「簡単ではない」などは、今の時代に受け入れられない反応です...

于 2011-06-30T21:27:30.040 に答える
3

Vyrotek: 入力方法は重要ではありません。GET、POST、暗号化/難読化された GET - 実際の違いはありません。アプリケーションがコマンドを受信する方法に関係なく、管理アクションを実行するには、発行元のユーザーが必要なことを実行できることを確認する必要があります。権限チェックは、コマンドを受信した後、実行する前に行う必要があります。そうでなければ、それはまったく安全ではありません。

于 2008-12-19T00:24:50.837 に答える
2

Stephen Walther の記事のヒント #46 で概説されている手法の使用を検討してください – [AcceptVerbs(HttpVerbs.Delete)] を使用するセキュリティ ホールを作成するため、リンクの削除は使用しないでください。

于 2009-03-08T23:58:20.247 に答える
1

以下に示すように、Accept Verbs 属性を使用して、Post リクエストのみを Delete コントローラー アクションに許可することもできます。

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

次に、ここで説明するように、偽造防止トークンを使用することもできます。

http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

于 2008-10-29T03:24:57.600 に答える
0

「commentid=4&userid =12345」が「code=1a2b23de12769」になるように、クエリ文字列を取得して圧縮し、Base64または16進数でエンコードするというファンキーなことを行いました。

基本的には「隠すことによるセキュリティ」ですが、サイトをハッキングしようとする人にとっては多くの作業が必要になります。

于 2008-10-29T02:11:38.403 に答える
0

これを簡単に行うことはできません。

アクションURLを使用して削除を行ったサイトの思い出があります。

イントラネットをクロールして検索を開始するまでは、すべて問題ありませんでした。

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

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

于 2008-10-29T02:12:04.863 に答える