0

現在、C# .NET をバックエンドとして使用して、Web サイト用のメッセージング システムをプログラミングしています。

メッセージング システムは Facebook の Web インターフェースに非常に似ており、AJAX 経由でメッセージを送信して、別の人と「チャット」できます。

実際の送信メッセージ ビットを処理する Web サービス (C#) を作成しました。次のコードを使用して、JQuery を使用してそのサービスをアクティブにしています。

// generic webservice used to retrieve count from db
function SendMessageAJAX(taskID, sendeeID, sendeeType, recipientId, recipientType, content) {
    $.ajax({
        type: "POST",
        url: "/WS/UIServices.asmx/SendMessage",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ 'content': content, 'SendeeType': sendeeType, 'SendeeId': sendeeID, 'RecipientType': recipientType, 'RecipientId': recipientId, 'taskID': taskID }),
        dataType: "json",
        success: function (msg) {

            // refresh chat area
            LoadMessages(false);
        },
        error: function () { alert("error"); }
    });
}

ご覧のとおり、リクエストで受信者と受信者の両方の情報を渡しています。誰でもこれらの値を変更して任意のユーザーになりすますことができるため、コードは明らかに非常に危険です。

サーバー側の SESSION 変数に現在ログインしているユーザーがいますが、コードは非同期で実行されます。つまり、実行時にセッション変数が定義されていません。

これらのアクションを AJAX 経由で安全に実行するにはどうすればよいでしょうか?

4

1 に答える 1

0

次の 2 つのオプションがあります。

  1. このコード プロジェクト記事のように ajax リクエストを暗号化するか、ウェブサイトに SSL を使用することができます。

  2. サーバーコードを に実装し、セッションにアクセスできるようにIHttpAsyncHandler実装します。IRequiresSessionState

http://msdn.microsoft.com/en-us/magazine/cc164128.aspx

ASP.NET でセッションを設定するために非同期呼び出しを実行することは可能ですか?

ssl を使用することが常に推奨されますが、実装する時間があれば、他のオプションも実行可能です。

于 2013-09-16T13:13:25.880 に答える