Vì vậy, cách tốt nhất để ngăn chặn một cuộc tấn công XSRF cho một ứng dụng GAE là gì? Hãy tưởng tượng những điều sau:Làm cách nào để ngăn chặn tốt nhất các cuộc tấn công CSRF trong ứng dụng GAE?
- Bất kỳ ai cũng có thể thấy đối tượng công khai của người dùng và id db.Model được sử dụng để yêu cầu tìm ra đối tượng cần hiển thị. Người dùng độc hại hiện có id.
- Người dùng độc hại tạo đối tượng của riêng họ và kiểm tra biểu mẫu xóa. Bây giờ họ biết làm thế nào để xóa một đối tượng với một id nhất định.
- Người dùng độc hại được người dùng vô tội gửi yêu cầu xóa cho đối tượng của người dùng đó.
Tôi có thể thêm các bước nào để ngăn chặn # 3? Lưu ý rằng khi tôi nói ID, tôi đang sử dụng phần ID thực tế của khóa. Một ý tưởng tôi có là sử dụng giá trị khóa đầy đủ trong các yêu cầu xóa, nhưng điều đó có ngăn cản người dùng độc hại không thể tìm ra điều này không? Theo như tôi biết, điều quan trọng là một số kết hợp của loại lớp mô hình, id ứng dụng và id đối tượng đối tượng, vì vậy chúng có thể lấy được khóa từ id nếu chúng muốn.
Bất kỳ ý tưởng nào khác? Jeff đã viết a post about this và đề xuất một vài phương pháp - giá trị biểu mẫu ẩn sẽ thay đổi theo từng yêu cầu và giá trị cookie được ghi qua js vào biểu mẫu. Tôi sẽ không muốn loại trừ người dùng không phải javascript, vì vậy giải pháp cookie không tốt - đối với giá trị biểu mẫu ẩn, tôi sẽ phải ghi dữ liệu trên mọi yêu cầu hiển thị đối tượng xóa - không phải là tình huống lý tưởng cho khả năng mở rộng ứng dụng!
Có ý tưởng nào khác không?
Tôi thích cách tiếp cận của macbirdie, nhưng tôi thích điều này cung cấp bảo mật hợp lý mà không cần lưu trữ phía máy chủ. –