最初はメソッドだけで削除リンクを作成していましたHtml.ActionLink
。しかし、それは間違っているという記事に出くわしました。そして、そのように使用すべきではありません。次に、Master -> Detail の方法を提案しました。しかし、それはばかげているようです。削除リンク (「Are You Sure」プロンプト付き) を取得し、それでもセキュリティ ホールにならないようにする方法が必要です。右?
3 に答える
はい、GET メソッドを使用してデータを削除するのは悪い習慣です。POST メソッドを使用する必要があります。たとえば、フォームまたは jquery/javascript を使用して実行できます。ただし、プロンプトが添付された単純なリンクを使用する場合、ユーザーは中央のボタンをクリックしてデータを削除したり、javascript を無効にしたりできることに注意してください。また、セキュリティ上の問題でもあります。誰かがあなたにリンクを提供し、サーバーからデータを削除する可能性があります。
例:
<a href="/controller/delete/1" onclick="$.post(this.href); return false;">Delete</a>
サーバーが /controller/delete/x への GET を取得すると、確認ページに POST フォームが表示されます (このフォームには 2 つのボタンYes
とがありNo
、最初のボタンは非表示のフィールドを持つフォームを送信します)。サーバーが POST (または DELETE) 要求を受け取った場合は、削除を行います。
この問題は、リンクや ActionLink などとは何の関係もありません。問題は、HttpGet 要求で削除するアクション メソッドを使用しないことです。
なぜこれをしてはいけないのかについて。あなたの上司があなたのオンライン従業員プロフィールに懲戒を入力したと想像してください。このアプリケーションが Get リクエストでレコードを削除することがわかっている場合は、img タグに警告を削除するための URL を含む特別に細工されたページを作成し、それを会社のホームページに配置するだけで済みます。最終的に、これらのエントリを削除するアクセス権を持つ誰かが Web ページにアクセスし、ふざける..明確な記録があります。
それはそれほど悪くはないように思えるかもしれません。あなたは自分の立場を改善しただけです。しかし、あなたの同僚があなたに腹を立てていて、彼があなたの上司をだましてあなたの給料を下げることができる同様のトリックを知っていると想像してみてください.
もうそんなに面白くない。
これらの種類のまたはアクションを許可することは安全ではありません。ユーザーが何をしているのかさえ知らずにトリガーされる可能性があるためです。
次の記事では、探していることを実行するための優れた方法について説明しています。ASP.NETMVCの 単純なjQuery削除リンク。
しかし、私はあなたが実際に代替案として探しているのはこの投稿だと思います: ASP.NETMVCはconfirmでActionLinkを削除します。
したがって、2つの選択肢があり、それがお役に立てば幸いです。