2011-12-17 32 views
16

Tôi muốn xây dựng các dự án sau:Cách tốt nhất để bảo mật javascript front end/REST trở lại trang web kiến ​​trúc kết thúc?

  • REST của công API trở lại cuối cùng có thể được truy cập bởi bất kỳ khách hàng thực
  • cuối phía trước với các tập tin tĩnh trong HTML/CSS/Javascript với các cuộc gọi Backbone.js jQuery vào cuối REST trở lại

Thực tế, có ba bên trong kiến ​​trúc của tôi: giao diện người dùng, là khách hàng của mặt sau, mặt sau và người dùng muốn xác thực đăng nhập trước trang.

Cách tốt nhất để bảo vệ ba bên liên quan đến kiến ​​trúc này là gì? Trong thực tế, tôi tin rằng nó chỉ là không thể làm một ứng dụng an toàn trên mặt trước nếu tôi làm tất cả mọi thứ trong javascript, vì vậy tôi có ý định ủy quyền xác thực/ủy quyền cho một lớp proxy trên máy chủ của tôi kết thúc trước. Bạn nghĩ gì về điều này ?

Tôi định sử dụng OAuth để bảo đảm kết thúc REST của mình, nhưng tôi không chắc liệu mình có phải sử dụng triển khai thực hiện 2 hoặc 3 không. Cách tiếp cận đúng trong trường hợp này là gì?

CẬP NHẬT: khi tìm kiếm sâu hơn trên trang web SO, tôi đã tìm thấy thread chính xác là những gì tôi muốn làm, ngoại trừ tôi muốn sử dụng Java ở phía máy chủ chứ không phải DotNet. Nếu tôi hiểu rõ, trên thực tế, trang web của tôi giống như bất kỳ ứng dụng khách nào của API REST của tôi, ngoại trừ nó là người duy nhất có quyền tạo tài khoản người dùng mới. Bởi vì, nếu API REST của tôi chỉ có thể truy cập bởi OAuth (giống như của Twitter), ai có thể thực hiện tạo tài khoản người dùng trước đây? Tôi có đúng không?

+6

Bạn chính xác rằng bất kỳ xác thực/ủy quyền nào được thực hiện trong js đều vô giá trị vì người dùng chỉ có thể tắt hoặc giả mạo nó. – Thomas

+0

@rico FYI, bạn có thể nhận được một số câu trả lời khác tại http://security.stackexchange.com. – Micah

+0

@Thomas, nó không đáng giá như xác thực biểu mẫu phía khách hàng. – amirouche

Trả lời

4

Một mối quan tâm lớn với bảo mật với kiến ​​trúc này là thử nghiệm. Các công cụ tự động sẽ gặp sự cố khi kiểm tra hệ thống này đối với các lỗ hổng phổ biến như SQL Injection, Direct Object Reference. Một công cụ hữu ích để kiểm tra kiến ​​trúc lạ là mã nguồn mở của OWASP Zed Attack Proxy hoặc proxy BURP độc quyền. Việc kiểm tra sẽ tốn thời gian và yêu cầu người có hiểu biết tốt về lỗ hổng ứng dụng web. Chúng tôi thường đề cập đến những người này là Pentesters.

Hình thức lưu giữ trạng thái phiên RESTful là sử dụng HMAC để bảo vệ các giá trị khỏi sửa đổi. Tuy nhiên, đây là một sự lạm dụng mật mã vì nó mở ra cánh cửa để tấn công. Kẻ tấn công có thể gây sức mạnh cho khóa bí mật được sử dụng trong HMAC của bạn và sau đó sửa đổi các giá trị như id phiên của mình hoặc truy cập vào một tài khoản khác trên hệ thống. Mật mã chỉ nên được sử dụng khi không có tùy chọn khác. Lỗ hổng này được ngăn chặn hoàn toàn bằng cách lưu trữ trạng thái phiên trong cơ sở dữ liệu, không phải là RESTful.

+0

Cảm ơn bạn vì mục đích Thử nghiệm, nhưng câu hỏi của tôi được định hướng nhiều hơn về cách xác thực người dùng trên trang web của tôi và ủy quyền trên đầu trang của tôi – rico

+0

@rico, Tại sao điều đó lại thay đổi? Làm thế nào là điều này khác với một ứng dụng html với đồng bằng cũ có được/bài? Chỉ cần sử dụng một phiên trên backend. Trình duyệt theo dõi một cookie.Trong dữ liệu phiên, bạn theo dõi id phiên của chúng và bao gồm nó trong tất cả các truy vấn sql để ngăn tham chiếu đối tượng trực tiếp không an toàn. Cũng giống như HTML, bạn vẫn phải lo lắng về CSRF, tiêm sql, xss, ect ... – rook

+0

ý của bạn là gì trong phiên trên chương trình phụ trợ? Nó là một kết thúc REST, vì vậy tôi cho rằng bạn có nghĩa là một cái gì đó mà sẽ đóng vai trò phiên, một mã thông báo bạn có nghĩa là gì? – rico

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