jQueryAjax調(diào)用和Html.antiForgeryToken()我已經(jīng)在我的應(yīng)用程序中實現(xiàn)了CSRF攻擊以下是我在網(wǎng)上的一些博客上看到的信息。特別是,這些職位一直是我實施的驅(qū)動因素。ASP.NETMVC的最佳實踐來自ASP.NET和Web工具開發(fā)人員內(nèi)容小組一種跨站點請求偽造攻擊的剖析菲爾·哈克博客ASP.NETMVC框架中的AntiForgeryToken-Html.AntiForgeryToken和ValidateAntiForgeryToken屬性大衛(wèi)·海登博客基本上,這些文章和建議說,為了防止CSRF攻擊,任何人都應(yīng)該實施以下代碼:1)增加[ValidateAntiForgeryToken]對于每個接受POST http謂詞的動作[HttpPost][ValidateAntiForgeryToken]public ActionResult SomeAction( SomeModel model ) {}2)增加<%= Html.AntiForgeryToken() %>表單中向服務(wù)器提交數(shù)據(jù)的助手<div style="text-align:right; padding: 8px;">
<%= Html.AntiForgeryToken() %> <input type="submit" id="btnSave" value="Save" /></div>無論如何,在我的應(yīng)用程序的某些部分,我使用jQuery向服務(wù)器發(fā)布Ajax帖子,根本沒有任何形式。例如,當(dāng)我允許用戶單擊圖像來執(zhí)行特定操作時,就會發(fā)生這種情況。假設(shè)我有一個列有活動列表的表。表的一個列上有一個圖像,上面寫著“標(biāo)記活動為已完成”,當(dāng)用戶單擊該活動時,我正在進(jìn)行Ajax發(fā)布,如下面的示例所示:$("a.markAsDone").click(function (event) {
event.preventDefault();
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: {},
success: function (response) {
// ....
}
});});如何使用<%= Html.AntiForgeryToken() %>在這種情況下?我應(yīng)該在Ajax調(diào)用的數(shù)據(jù)參數(shù)中包含助手調(diào)用嗎?很抱歉寫了這么長的郵件,非常感謝你的幫助。編輯:按jayrdub答:我用了以下方法$("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) {
// ....
}
});});
3 回答

蕭十郎
TA貢獻(xiàn)1815條經(jīng)驗 獲得超13個贊
AddAntiForgeryToken = function(data) { data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val(); return data;};
<%-- used for ajax in AddAntiForgeryToken() --%><form id="__AjaxAntiForgeryForm" action="#" method="post"><%= Html.AntiForgeryToken()%></form>
$.ajax({ type: "post", dataType: "html", url: $(this).attr("rel"), data: AddAntiForgeryToken({ id: parseInt($(this).attr("title")) }), success: function (response) { // .... }});

烙印99
TA貢獻(xiàn)1829條經(jīng)驗 獲得超13個贊
$.post()
Content-Type
$(document).ready(function () { var securityToken = $('[name=__RequestVerificationToken]').val(); $(document).ajaxSend(function (event, request, opt) { if (opt.hasContent && securityToken) { // handle all verbs with content var tokenParam = "__RequestVerificationToken=" + encodeURIComponent(securityToken); opt.data = opt.data ? [opt.data, tokenParam].join("&") : tokenParam; // ensure Content-Type header is present! if (opt.contentType !== false || event.contentType) { request.setRequestHeader( "Content-Type", opt.contentType); } } });});
- 3 回答
- 0 關(guān)注
- 440 瀏覽
添加回答
舉報
0/150
提交
取消