2012-04-05 30 views
13

Tôi đang tạo một API JSON RESTful và tôi quan tâm đến json data theftCross-Site Request Forgery.Khả năng tương thích của tiêu đề http "Gốc" để thực thi các hạn chế

Giải pháp tốt được tạo để giải quyết cả hai vấn đề này là Origin http header. Tuy nhiên tôi lo ngại rằng phương pháp này không tương thích với tất cả các trình duyệt hiện đại. Đây có phải là một mối quan tâm hợp lệ? Tiêu đề Origin http có vô dụng do vấn đề tương thích không? Nguồn gốc có nên được xem xét khi thực hiện HTTP referer check không?

+0

Nguồn gốc tốt, bạn cũng sẽ muốn kiểm tra lại Máy chủ lưu trữ vì đó là tiện ích mở rộng của Chrome tiêu đề không thể sửa đổi - http://code.google.com/chrome/extensions/webRequest.html#life_cycle_footnote –

+0

@Devin G Rhode Tất cả các tiêu đề http là tầm thường để giả mạo, ngoại trừ trong một cuộc tấn công CSRF. Nếu kẻ tấn công có thể cài đặt tiện ích mở rộng chrome trên trình duyệt nạn nhân thì có vấn đề lớn hơn CSRF. – rook

+1

@Rook Một kẻ tấn công có thể lẻn mã độc hại vào một phần mở rộng (phần mở rộng ban đầu của riêng mình, hoặc bất kỳ phần mở rộng gốc nào), và chờ mọi người cài đặt nó. Nó không nhất thiết phải là một cuộc tấn công hướng vào một người dùng/máy cụ thể để trở nên "hữu ích". –

Trả lời

7

Dưới đây là danh sách các trình duyệt tương thích và sự cố đã biết. Bây giờ, tùy thuộc vào bạn nếu bạn có thể sống với những giới hạn này:

Can I use...

+0

trang web này thiếu nhiều, bao gồm 'nội dung-bảo mật-chính sách' và' x-frame-options' – rook

+0

Thực ra, nó bao gồm nội dung an ninh-chính sách: http://caniuse.com/contentsecuritypolicy/embed/ tác nhân = mobile & eras = -3, & liên kết Đối với tùy chọn khung hình x, hãy truy cập: https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet –

2

Đó là một mối quan tâm hợp lệ. Ai đó có thể đang sử dụng trình duyệt cũ hơn không hỗ trợ đầy đủ. Cũng có thể có lỗi trong phiên bản beta.

Đồng thời xem xét thêm X-Frame-Options: SAMEORIGIN vào API JSON của bạn để ngăn người nào đó đưa trang web của bạn vào khung nội tuyến.

Đồng thời xem xét việc thêm các trả lời JSON trả về của bạn với các ký tự đặc biệt và tự tách chúng ra trong bộ giải mã JSON của bạn. Đây là cách Google thực hiện: Why does Google prepend while(1); to their JSON responses?

Đồng thời, hãy xem xét, để tăng cường bảo mật, thêm nonce cho mỗi yêu cầu và ký yêu cầu xác minh mã đó đến từ mã của bạn thay vì trang web lừa đảo. Điều này tương tự như cách hoạt động của OAuth1.0. Một cách khác, là tạo mã thông báo cho mỗi phiên, tự động hết hạn và làm mới mã thông báo khi cần. Đây là cách hoạt động của OAuth2.0. Điều này cho phép truy cập không hợp lệ theo yêu cầu, ví dụ, nếu bạn tìm thấy một lỗi, vì vậy khách hàng cũ phải nâng cấp.

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