SORU
2 Kasım 2010, Salı


Ajax çağrıları ve Html jQuery.()AntiForgeryToken

Benim app internette bazı blog okudum o bilgiler aşağıdaki saldırıları CSRF için hafifletme hayata geçirdik. Özellikle bu yazı benim uygulama şoförü olmuştur

Esasında bu makaleler ve öneriler CSRF saldırısını önlemek için herkes aşağıdaki kodu uygulamak gerektiğini söylüyor:

1) POST Http fiilini kabul eden her eylem [ValidateAntiForgeryToken] Ekleyin

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SomeAction( SomeModel model ) {
}

2) sunucusuna veri gönderen formlar içinde <%= Html.AntiForgeryToken() %> yardımcı Eklemek

<div style="text-align:right; padding: 8px;">
    <%= Html.AntiForgeryToken() %>
    <input type="submit" id="btnSave" value="Save" />
</div>

Neyse benim app bazı bölgelerinde herhangi bir form olmadan sunucuya jQuery ile Ajax Mesajlar yapıyorum. Bu kullanıcı izin veriyorum bir görüntü üzerinde örneğin belirli bir eylem yapmak olur.

Aktivitelerin listesini içeren bir tablo var sanırım. "Tamamlandı olarak İşaretle aktivite kullanıcı etkinliği üzerine tıkladığınızda" ve aşağıdaki örnekteki gibi Ajax POST yapıyorum: . yazan tablonun sütun bir görüntü var

$("a.markAsDone").click(function (event) {
    event.preventDefault();
    $.ajax({
        type: "post",
        dataType: "html",
        url: $(this).attr("rel"),
        data: {},
        success: function (response) {
            // ....
        }
    });
});

Nasıl bu gibi durumlarda <%= Html.AntiForgeryToken() %> kullanabilir miyim? Ajax çağrı veri parametre içinde yardımcı Ara dahil etmeli miyim?

Uzun yazı ve çok yardım ettiğin için teşekkürler için özür dilerim

EDİT:

jayrdub Her cevap olarak aşağıdaki şekilde kullandım

$("a.markAsDone").click(function (event) {
    event.preventDefault();
    $.ajax({
        type: "post",
        dataType: "html",
        url: $(this).attr("rel"),
        data: {
            AddAntiForgeryToken({}),
            id: parseInt($(this).attr("title"))
        },
        success: function (response) {
            // ....
        }
    });
});

CEVAP
2 Kasım 2010, Salı


Böyle basit bir js fonksiyonu kullanıyorum

AddAntiForgeryToken = function(data) {
    data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
    return data;
};

Bir sayfada her form bu yana token için aynı değeri, sadece senin içinde böyle bir şeyler olacak en üstteki Ana Sayfa

<%-- used for ajax in AddAntiForgeryToken() --%>
<form id="__AjaxAntiForgeryForm" action="#" method="post"><%= Html.AntiForgeryToken()%></form>  

Ajax çağrı sonra (ikinci örnek maç için düzenlenmiş)

$.ajax({
    type: "post",
    dataType: "html",
    url: $(this).attr("rel"),
    data: AddAntiForgeryToken({ id: parseInt($(this).attr("title")) }),
    success: function (response) {
        // ....
    }
});

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kanaal van Dj0fifty

    Kanaal van D

    28 EKİM 2011
  • Matthew Pearce

    Matthew Pear

    9 AĞUSTOS 2009
  • NLthomas21

    NLthomas21

    20 Mayıs 2008