2011-01-18 33 views
10

Làm thế nào để bảo vệ chống lại các cuộc tấn công XSRF trong Grails. Tôi thấy rằng các hình thức hỗ trợ khái niệm useToken mà (tôi nghĩ là đủ). Tuy nhiên, yêu cầu liên quan đến từ xa hoặc AJAX khác không hỗ trợ tính năng này.Làm thế nào để bạn bảo vệ chống lại XSRF trong Grails?

Ngoài ra, có cách nào để đảo ngược chức năng của useToken để luôn được sử dụng thay vì được bật trên cơ sở từng trường hợp không?

+0

Tôi biết rằng [kiểm tra tiêu đề HTTP Referer là không đủ] (http://www.secureworks.com/research/blog/research/21009/), nhưng đó là một khởi đầu tốt hơn không có gì, đặc biệt nếu bạn không không cho phép tham chiếu trống. Và điều này khá dễ dàng để thêm làm bộ lọc. – OverZealous

Trả lời

2

Bạn có thể thử xem mã nguồn của thẻ <g:form>. Nó sử dụng một số SynchronizerToken để tạo mã thông báo và lưu nó trong phiên. Dựa trên độ phân giải của this issue, bạn có thể sử dụng cùng một mã thông báo cho tất cả các biểu mẫu trên cùng một trang. Tôi đã không thử điều này, nhưng về mặt lý thuyết, bạn chỉ cần tạo thủ công một trường ẩn trên biểu mẫu và tạo mã thông báo trong trường đó.

0

Chúng tôi đã chèn một giá trị ẩn vào đối tượng yêu cầu trong bộ lọc trước và mã hóa giá trị bằng một khóa cụ thể. Sau đó, chúng tôi tiêm giá trị request.token đó vào mọi biểu mẫu trên trang web và khi chúng tôi nhận được POST, chúng tôi có bộ lọc trước để xác minh rằng trường ẩn hiện diện và giá trị của nó có thể được giải mã bằng cùng khóa bí mật đó.

Nếu giá trị ẩn đó không tồn tại hoặc nếu nó đã cũ - chúng tôi sử dụng dấu thời gian làm trọng tải - chúng tôi cung cấp cho khách hàng trạng thái lỗi.

Đây là một cách thay thế cho những gì đã được mô tả ở trên và chúng tôi sử dụng điều này, vì chúng tôi không sử dụng các phiên trên trang web của chúng tôi để giúp cân bằng tải dễ dàng hơn.

Các vấn đề liên quan