2016-04-17 7 views
2

Ich habe ein Raster in einer meiner Ansichten und erstellt eine Spalte Aktionen darin. In dieser Spalte befinden sich Schaltflächen zum Bearbeiten und Löschen. Wenn der Benutzer auf die Schaltfläche zum Löschen klickt, verwende ich jQuery, um auf sein Klickereignis zuzugreifen. HierIst die Aktionsmethode ohne AntiForgeryToken in ASP.NET MVC nicht sicher?

ist, was meine Ajax löschen aussieht:

$(document).on('click', '.btnDeleteRole', function (e) { 
     e.preventDefault(); 
     if (confirm("Are you sure you want to delete this record?")) { 
      var $this = $(this); //store $(this) to a variable 
      var roleId = $this.attr('data-role-Id'); 

      $.ajax({ 
       type: "POST", 
       url: "/admin/roles/delete", 
       data: { id: roleId }, 
       dataType: "html", 
       success: function (data) { 
        // rebind kendo grid 
       } 
      }); 
     } 
    }); 

Hier ist, was meine Löschaktion Methode wie folgt aussieht:

// POST: Roles/Delete/5 
[Route("roles/delete")] 
[HttpPost] 
public async Task<IActionResult> RoleDelete(string id) 
{ 
    IdentityRole role = await _roleManager.FindByIdAsync(id); 
    await _roleManager.DeleteAsync(role); 
    return RedirectToAction("RoleIndex"); 
} 

Da die Löschtaste nicht Teil eines Formulars ist Ich kann keine AntiForgeryToken-Anmerkung über meiner ActionMethod haben.

Ist das Löschen solcher Artikel sicher?

+0

Sie müssen das Token über JS übergeben. – SLaks

+0

Benötige ich wirklich einen Token pro Zeile in meinem Grid? Muss ich nicht jeden Gegenstand in ein Formular verpacken? –

+0

Sie können ein einzelnes Token verwenden, solange das JS es bekommen kann. – SLaks

Antwort

4

Nein, es ist nicht sicher. Wenn Sie kein Anti-Pilz-Token verwenden, sind Sie CSRF-Attacken ausgesetzt, wie beschrieben here.

Sie müssen nur das Hauptformular versteckten Token in Ihrem Grid löschen Beiträge senden. Sie benötigen keinen Token pro Zeile, da Sie das versteckte Token des Formulars und das Token des Cookies haben, das alles ist, was Sie brauchen.

+0

Was ist, wenn meine Ansicht nur eine Rasterliste der Produkte enthält? Erstelle ich einfach ein leeres Formular mit einem Anti-Fälschungs-Token? Kannst du mir eine Idee geben, wie ich über js darauf zugreifen kann? –

+0

@BlakeRivell Sie brauchen nur @ Html.AntiForgeryToken() überhaupt kein Formular, wenn Sie das Token über Ajax senden. Lesen Sie den Link zu weiteren Details zu Ajax-Anfragen, wenn Sie Json anstelle des Formulars posten – tede24

Verwandte Themen