8 Stimmen

ASP.net MVC AntiForgeryToken über AJAX

Ich entwickle derzeit eine MVC-Anwendung in ASP.net. Ich verwende AJAX.ActionLink, um einen Link zum Löschen in einer Liste von Datensätzen bereitzustellen, was jedoch sehr unsicher ist. Ich habe dies gesetzt:

<AcceptVerbs(HttpVerbs.Post)>

über die Funktion, die das Löschen vornimmt, wodurch verhindert wird, dass die Funktion einfach durch eine URL aufgerufen wird. Die andere Sicherheitslücke, die immer noch besteht, ist jedoch, dass, wenn ich eine einfache HTML-Seite mit diesem Inhalt machen würde:

<form action="http://foo.com/user/delete/260" method="post">
<input type="submit" />
</form>

Es würde zwar immer noch eine Buchung durchgeführt, aber von einem anderen Ort aus.

Ist es möglich, das AntiForgeryToken mit einem AJAX ActionLink zu verwenden? Wenn ja, ist dies ein sicherer Ansatz? Gibt es weitere Sicherheitslücken, die ich noch nicht erkannt habe?

0voto

Huckepack mit dem $.ajaxPrefilter Antworten, habe ich das Token zu beiden options y originalOptions und nicht die jqXHR Kopfzeilen. Dazu muss sich das Token irgendwo in einem Formular auf Ihrer Seite befinden.

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    var token = $('input[name="__RequestVerificationToken"]');
    if (token.length > 0) {
        var data = options.data;
        var dataArray = originalOptions.data;
        if (data && !data.includes('__RequestVerificationToken')) {
            options.data = data + '&__RequestVerificationToken=' + token.val();
        }
        if (dataArray && !('__RequestVerificationToken' in dataArray)) {
            var tokenObject = { name: '__RequestVerificationToken', value: token.val() };
            originalOptions.data.push(tokenObject);
        }
    }
});

Denken Sie daran, dass dieses Token zu jeder einzelnen AJAX-Anfrage auf Ihrer Seite hinzugefügt wird, so dass Sie vielleicht nach der options.url Zeichenfolge oder options.type == 'POST' .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X