1

私はこのプラクティスを使用して、AJAX を使用してコメントを追加し、情報を収集してコメントを挿入する ASP.NET ハンドラーにデータを送信しますが、誰もがそれを使用できるのではないかと心配しています。

    //AddComment.ashx
    public void ProcessRequest (HttpContext context) {
    CommentsDB db = new CommentsDB();
    db.InsertComment(new Comment(context.Request["name"].ToString(), context.Request["comment"].ToString(), "no", int.Parse(context.Request["id"].ToString())));

    context.Response.ContentType = "text/plain";
    context.Response.Write("succeed");
}

        //Comments.js
        function AddComment()
    {
        n = document.getElementById('txtName').value;
        c = document.getElementById('txtComment').value;
        i = document.getElementById('ctl00_ContentPlaceHolder1_thread').value;
        m = document.getElementById('ctl00_ContentPlaceHolder1_Label1');
        if(n == "" || c == "" || n.length > 100 || c.length > 400)
        {
            m.innerHTML = "<center><font color=black size=3><b><font color=red>*</font> An error has occurred</b></font></center><br>";
            return;
        }
        m.innerHTML = "";
        document.getElementById('btn').disabled = true;
        $.post("./Handlers/AddComment.ashx", {'name':n, 'comment':c, 'id':i}, function(Response){
            m.innerHTML  = "<center><font color=black size=3><b>accepted</b> <img src=./Images/success-icon.png></font></center><br>";
        });         
    }
4

2 に答える 2

1

ユーザーがハンドラーに対して独自の HTTP リクエストを作成し、偽のデータを提供する可能性があるというあなたの仮定は正しいです。また、ブラウザーで (任意の開発者ツールバーを使用して) ページのマークアップを操作し、同じことを行うこともできます。

したがって、これが心配な場合は、サーバー側で検証を行う必要があります。アプリケーションで認証が必要な場合は、現在のユーザー名をProcessRequestポストするのではなく、ハンドラーのメソッドで検索するだけです。

それがあなたの質問の目的だと思います。また、マークアップをクリーンアップするcenterと、fontタグは非推奨になります。

于 2011-03-31T16:24:13.897 に答える
0

コメント投稿者にログインする必要がある場合は、実際のユーザーを確認します(たとえば、セッション中など、Webサーバーに保存されます)。

または、認証されていないコメントを許可する場合は、自動リクエストから保護するためにキャプチャを使用することを検討してください。

于 2011-03-31T18:09:51.820 に答える