Próbuję zaimplementować ochronę CSRF w aplikacji zbudowanej przy użyciu pliku node.js przy użyciu frameworku express.js. Aplikacja wykonuje obfite wykorzystanie wywołań postów Ajax na serwerze. Rozumiem, że framework connect zapewnia oprogramowanie warstwy pośredniej CSRF, ale nie jestem pewien, jak go wdrożyć w zakresie postów postów Ajax po stronie klienta.Jak zaimplementować ochronę CSRF w wywołaniach Ajax za pomocą express.js (szukając pełnego przykładu)?
Jest kilka rzeczy na ten temat w innych pytaniach zamieszczonych tutaj w stackoverflow, ale muszę jeszcze znaleźć dość kompletny przykład, jak zaimplementować go zarówno po stronie klienta, jak i serwera.
Czy ktoś ma przykład pracy, którym zależy na tym, jak go wdrożyć? Większość przykładów, które widziałem, zakłada, że renderujesz formularz po stronie serwera, a następnie przesyłasz go (wraz z osadzonym polem formularza csrf_token) po stronie klienta. W mojej aplikacji cała treść jest renderowana po stronie klienta (w tym szablony) za pośrednictwem Backbone.js. Wszystko, co robi serwer, to dostarczanie wartości w formacie JSON, które są wykorzystywane przez różne modele w Backbone.js po stronie klienta. Według mojego rozumowania będę musiał najpierw pobrać csrf_token przez ajax, zanim będzie można go użyć. Obawiam się jednak, że może to być problematyczne z punktu widzenia bezpieczeństwa. Czy to jest ważny problem?
Dzięki za szybką odpowiedź. W mojej aplikacji wszystkie treści po stronie klienta są wykonywane za pośrednictwem ajax. Rzeczywiste renderowanie treści (w tym szablonów) wykonywane jest po stronie klienta. Wszystko, co robi serwer, to dostarczanie zmiennych danych do strony klienta w formacie JSON. Oznaczałoby to, że muszę odzyskać token CSRF za pośrednictwem ajax, aby renderować go na stronie, aby następnie mógł zostać odesłany z powrotem do żądania ajax ajax. Obawiam się, że może to być problematyczne z punktu widzenia bezpieczeństwa, czy jest to ważny problem? – Benjen
Jeśli możesz, dobrym sposobem na uzyskanie CSRF dla klienta jest renderowanie go wewnątrz znacznika 'meta' (a la Rails) lub czegoś podobnego z Express. –