5

GUIDに よる AJAX リクエストのセキュリティ保護 と ajax リクエストのセキュリティ保護を既に読み ました 。次に、私のシナリオを説明しましょう。以下は、主題の説明に役立つ可能性のあるコード スニペットです。

[WebMethod[EnableSession = True]
[ScriptMethod]

    public static string CreateTitle(string strTitleName)
    {
    string strResult = "Custom jSon string";
    if(Session["Authorized"] == "True" && !String.IsNullOrEmpty(strTitleName))
    {
         String strTitle = Server.HtmlEncode(strTitleName);
         InsertRecordInDB(strTitle);
         strResult = "Custom jSOn string" + EncryptMD5("record id");
    }
           return strResult;
    }

以下は、パラメーターを送信するための JavaScript 呼び出しです。btnCreateTitle_click は、ボタン クライアント側のクリック イベントです。txtTitle は、タイトル名を受け入れるテキスト ボックスです。バリデーターは、テキストボックスも検証するためにページ上に作成されます.CreateTitleは、scriptmanagerを使用して呼び出すページメソッドです

function btnCreateTitle_Click(evnt){
if(Page.ClientValidate()){
if($get("txtTitle")){
PageMethods.CreateTitle($get("txtTitle").value,success,failure,context);
}}}

関数 success は、タイトルが作成されたといううなるメッセージを表示し、作成されたタイトルの詳細を表示するための URL へのクエリ文字列として暗号化されたレコード ID を含むリンクを表示します。

今、切実な質問ですが、

  1. これは十分に安全ですか?私は何が欠けていますか?
  2. プロセスをより安全かつ迅速にするにはどうすればよいですか?
4

1 に答える 1

4

メソッドを認証済みおよび承認済みのユーザーに制限することは簡単ですが、クエリ文字列でデータベース ID を公開すると、認証済みおよび承認済みのユーザーが、アクセスしていないレコードにアクセスしようとする可能性が生じます。これは特に、データベース ID が整数またはその他の簡単に推測できる識別子である場合に当てはまります。GUID をデータベース ID として使用すると、このリスクが軽減される可能性がありますが、完全ではありません。

常に覚えておく必要があるのは、入力を信頼しないことです。あいまいさ (つまり、暗号化など) によるセキュリティは、信頼できる手法ではありません。サービスは、現在のユーザーが要求したレコードの取得を許可されていることを常に確認する必要があります。これは、行レベル セキュリティと呼ばれることもあります。これは、プログラムによってのみ行うことができます。

たとえば、誰かがレコードを表示する権限があるかどうかを判断するだけでなく、要求しているレコードに実際にアクセスする権利があることを確認する必要があります。

これは、レコードを認証されたユーザーに関連付ける何らかの方法が必要であることを意味します。

ところで: HTTP リクエストは、潜在的に危険な入力に対して検証されます。

お役に立てれば、

于 2011-06-04T08:24:28.113 に答える