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

  • AmeriiK_HD

    AmeriiK_HD

    16 AĞUSTOS 2012
  • PamtheBlamofficial

    PamtheBlamof

    31 Aralık 2010
  • wwjoshdu

    wwjoshdu

    18 ŞUBAT 2011