2011-07-03 19 views
0

だから、通常、私のようなリンクを持つGET、POSTのように見えるURLを作る方法。 賢いユーザーはリンクを自分自身で再作成していくつかのデータにアクセスするかもしれないので、私は本当に動揺してしまいます。これは望ましくありません。私は、サーバー側の設定のセキュリティをすることができます知っているが、私はリンクをしたいように見えると思います:ASP.NET MVCでASP .NET MVCはない

http://domain.com/action 

そして、「いくつかの」と「foo」でPOSTリクエストのように送信

答えて

1

アクションポストとの区別はしないでください。アクションのパラメータに関する限り、取得してください。ただし、属性[HttpPost]でアクションをマークすることから始めることができます。これにより、リクエストオプションが投稿のみに制限されます。

2番目の「問題」は、getの代わりにpostを使うようにすべてのリンクを変更する必要があります。これはajaxを使って行うことができます。そのためにはjQueryの$.postをチェックしてください。

これはパラメータのセキュリティ上の問題を解決するものではありませんが、クエリ文字列に表示するか、postによって送信するかは問題になりません。誰かがポストデータに何かを注入したいのであれば、それはロケット科学ではありません。

+0

真。しかし、少なくともリンクはよりよく見えます。 クエリ文字列が存在しない場所ではシンプルなソリューションを見たので好奇心を持っていますが、データは何らかの理由でサーバー –

+0

に渡されなければなりませんが、友だちとリンクを共有できないという欠点があります。 –

+0

誰もが投稿編集のようなものへのリンクを共有するのではないかと思うので、それは問題ではありません。 –

1

フォームを動作させるには、それをラップする必要があります。入力は隠されています。サーバー側では、アクションをPOST要求にのみ応答するように制限する必要があります。しかし、これはあなたの問題を本当に解決するものではありません。充分興味深い知識のあるユーザーはPOSTをGETとして簡単に作ることができます。

0

フォームにフォームを追加し、ポストの後にモデルを取り込むアクションに[HttpPost]属性を適用できます。

(また、あなたがボタンやsumbitするためのリンクが必要になります)かみそりビューにフォームを追加:

@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { @id = "someFormId" })) 
{ 
    @Html.HiddenFor(model => model.some) 
    @Html.HiddenFor(model => model.foo) 
} 

そして、ここではあなたのポストをproccessするアクションとコントローラーです:

public class SomeController : Controller 
{ 
    [HttpPost] 
    public ActionResult SomeAction(SomeModel model) 
    { 
     //process 'some' and 'foo' here 
     return View(model); 
    } 
} 

セキュリティを強化するために、 "some"と "foo"の値を簡単に暗号化/復号化できます。