Angular sets the X-XSRF-TOKEN
header to the value of the XSRF-TOKEN
cookie:Tại sao AngularJS gửi tiêu đề X-XSRF-TOKEN dưới dạng chuỗi JSON?
var xsrfValue = isSameDomain(config.url, $browser.url())
? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]
: undefined;
if (xsrfValue) {
headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;
}
Nhưng, nếu một thiết lập XSRF-TOKEN
Cookie sử dụng $cookieStore
(đối với Rails tích hợp, ví dụ):
$cookieStore.put("XSRF-TOKEN", "my_token");
the cookie is stored as JSON string:
put: function(key, value) {
$cookies[key] = angular.toJson(value);
}
này có nghĩa là tiêu đề sẽ có thêm dấu ngoặc kép:
X-XSRF-TOKEN "my_token"
Tại sao góc không gọi fromJson()
khi nó đặt giá trị của tiêu đề để các tiêu đề sẽ trông như thế này:
X-XSRF-TOKEN my_token
?
Điều đó sẽ giúp chúng tôi xóa các dấu ngoặc kép thêm ở phía máy chủ.
Tôi có thiếu điều gì đó hiển nhiên ở đây không?
Lưu ý: Tôi không tìm cách giải quyết. Tôi đang cố gắng để hiểu liệu hành vi này là hành vi dự định, và nếu có, lý do là gì?
Tôi không biết nếu đó là hành vi dự định, nhưng nó có thể có một tác dụng phụ rất mong muốn của việc ngăn chặn mã thông báo XSRF không bị nhận dạng khi nhận được dưới dạng cookie. Sau khi tất cả, CSRF hoạt động cụ thể bởi vì trình duyệt gửi cookie của họ với tất cả các yêu cầu, do đó, mã thông báo bị đặt nhầm chỗ trong cookie không thể đọc chính xác sẽ giúp ngăn tình cờ vô hiệu hóa việc bảo vệ. – atk