0

jQuery ajaxを介してユーザーからサーバーに送信される入力をテストすると、「潜在的に危険なRequest.Form値がクライアントから検出されました」というエラーが発生します。"<s"c'o<>" ユーザー名として入力exに意図的に一重引用符、二重引用符、html文字を入れた場合にのみ表示され ます。それでも、ユーザーが入力しようとする不正な入力を適切にエンコードおよびデコードできるようにしたいと思います。

これがクライアント側のjqueryです

    var email = encodeURIComponent($('#loginEmail').val());  
    var password = encodeURIComponent($('#loginPassword').val());

    $.ajax({
        async: false,
        url: 'Account/CheckLogin',
        dataType: 'JSON',
        contentType: 'application/json',
        data: {
            email: email,
            password: password
        },
        success: function (resp) {
            alert(resp.valid);
            if (resp.valid == "false") {
                isValid = false;
                $('.errorspan').show();
            }
        }
    });

最初の行のブレークポイントに到達する前にエラーがスローされるため、コントローラーコードは実際には重要ではありません。コードを処理する機会を得る前に、Asp.netがこれをajaxとして渡そうとしているのを見つけたようです。私の質問は-なぜこれがencodeUriComponent()で起こっているのですか??

4

1 に答える 1

1

サーバー側のリクエスト検証をオフにする必要があります。たとえば、ここを参照してください。

なぜそれが起こっているのですか?Microsoftは基本的に、要求の検証をオフにする方法を知らない人は、データベースにラウンドトリップしてエンコードを考慮せずにページに戻すと有害な可能性のあるデータを信頼できないと想定しています。それはおそらく何年にもわたって多くの人々を彼ら自身から救ったでしょう。'URIエンコードは、少なくともFirefoxでは.NETから「危険」を「隠す」ことはありません。

于 2013-03-14T22:06:21.170 に答える