0

現在、MVC3フォームに基本情報を投稿しているレガシーアプリケーションがいくつかあります。それをGETに分離し、クエリ文字列の値を渡したいと思います。簡単です。ただし、リクエストに偽造防止トークンを追加したいと思います。まず第一に、これは良い選択肢のように思われますか?第二に、MVC3以外のモジュールからMVC3フォームにそのような機能を実装する例はありますか?

私の他の選択肢は、クエリ文字列を暗号化することです。

4

2 に答える 2

1

ASP.NET によって実装される偽造防止トークンは、CSRF (corss-site-request-forgery) を防止するメカニズムとして意図されており、HTTP でのみ機能しますPOST

ベースの「API」を実装しているため、GETこのトークンは機能しません (クエリ文字列の長さなどの制限に注意してください)。

あなたの目標が正確にはわかりません...あなたの目標に応じて、解決策はクエリ文字列の暗号化または署名、またはその両方です。

于 2012-10-15T17:33:04.540 に答える
1

この mvc3 アクションに必要なすべての投稿を行うことができます。postdata がサーバー側オブジェクトと一致することを確認するだけです。はい、安全のために偽造防止トークンを使用する必要があります。

JavaScript では、たとえば jQuery を使用してこのような投稿を作成できます。ご覧のとおり、フォームは使用していませんが、javascript コードのみを使用しています。Mvc はこれを完全に処理できます。

$.ajax({
    type: 'POST',
    url: urlToYourMvcAction,
    data: {
        name: 'John Doe',
        age: 25
    }, 
    success: successCalback,
    error: errorCallback);

public class Person
{
    public int Id { get; set; }
    public string Name { get; ;set }
    public int Age { get; set; }
}

public class PersonController : Controller
{
    [HttpPost]
    public ActionResult Add(Person person)
    {
          //Your code
    }
}

レガシ アプリケーションの c# WebClient オブジェクトを使用して、同じポスト リクエストを簡単に行うことができます。フィドラーまたは開発者ツールを使用してリクエストを検査し、投稿に必要な正しいパラメーターを渡すことができます。

ああ、get リクエストを使用すると、リクエストが大きくなったときに問題が発生する可能性があります。投稿は、サーバーに送信されたデータに基づいています。Gets は、サーバーからデータを取得するためのものです。

于 2012-10-15T17:33:15.363 に答える