現在、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 経由で安全に実行するにはどうすればよいでしょうか?