2013-04-05 22 views
10

Tôi biết câu hỏi này có thể quá chung chung nhưng với mục đích thu hẹp câu hỏi, dưới đây là mô tả ngắn gọn:Các mối đe dọa có thể xảy ra khi gọi các dịch vụ web bằng cách sử dụng JQuery là gì và làm cách nào để tránh chúng?

Tôi đang định bỏ qua ASP.net UpdatePanel và chuyển sang sử dụng ajax qua JQuery. Tôi sợ rằng vì tính chất đơn giản, phía máy khách của JavaScript (và do đó là mã JQuery), bất kỳ ai tìm đến nguồn trang web của tôi đều có thể nhận ra URL của các dịch vụ web mà tôi đang gọi và những gì đang được chuyển cho các dịch vụ web đó.

Khi sử dụng UpdatePanel cho các loại hoạt động này, tôi chắc chắn rằng các dịch vụ web gọi được thực hiện trên máy chủ và tôi không lo ngại về các vấn đề về thông tin gọi dịch vụ web nhạy cảm được hiển thị công khai. lập kế hoạch để sử dụng Ajax thông qua JQuery, Nó lo lắng cho tôi rất nhiều.

Quan ngại của tôi có hợp lý không và liệu có đúng hay không, các giải pháp tốt nhất để tránh các mối đe dọa của dịch vụ web-gọi điện thoại-thông tin đang được hiển thị là gì?

Làm rõ: khi nói UpdatePanel, tôi có nghĩa là sử dụng một chuỗi các techiques bao gồm ASP.net AJAX, code-behind và dựa vào các file DLL server-side để thực hiện các hoạt động async server-side thay vì jquery Ajax đòi hỏi các dịch vụ web cho intracting với máy chủ.

+0

Tuyên bố "gọi dịch vụ web được thực hiện trên phía máy chủ [với UpdatePanel]" có vẻ sai vì UpdatePanel cũng cho phép công nghệ phía máy khách. Tôi không nghĩ rằng các mối đe dọa sẽ thay đổi khi chuyển sang jQuery. Dịch vụ web của bạn không nên thay đổi trên thực tế, nếu chúng đã được bảo mật. –

+0

Một bit quan trọng cần làm rõ về câu hỏi của bạn là: "Tôi chắc chắn rằng các dịch vụ web gọi được thực hiện trên phía máy chủ" - các dịch vụ web * này *, chúng có được tạo tự động bởi ASP.NET hay không * tách biệt * các dịch vụ web cụ thể/riêng biệt được gọi từ phía máy chủ? – Jesse

+0

Làm rõ: khi nói UpdatePanel, tôi có nghĩa là sử dụng một chuỗi các techiques bao gồm ASP.net AJAX, code-behind và dựa vào các Dll phía máy chủ để thực hiện các hoạt động bên máy chủ async thay vì jquery Ajax yêu cầu các dịch vụ web để thu hút với máy chủ. – Farshid

Trả lời

6

Không có cách nào trên internet để bảo vệ các dịch vụ web của bạn mọi lúc bằng cách chỉ ẩn URL. Tôi không chắc chắn khi bạn nói updatepanel của bạn không gọi dịch vụ web từ máy chủ bạn không dùng sức mạnh thực sự của AJAX.

Một cách để bảo mật dịch vụ web của bạn là sử dụng xác thực ở phía dịch vụ web. Ví dụ bạn cần gửi một số khóa xác thực mỗi khi bạn truy cập nguồn và điều này rất phổ biến, bạn có rất nhiều dịch vụ web công cộng bảo vệ nó bằng cách sử dụng khóa auth như triển khai OpenId. Trong trường hợp bạn không muốn thay đổi logic dịch vụ web, tôi nghĩ rằng cách jquery của AJAX không phải là một tùy chọn an toàn.

Đây là suy nghĩ, bạn có thể có hai cấp dịch vụ web, một dịch vụ web sẽ mở cho tất cả những gì bạn có thể sử dụng trong jquery. Từ dịch vụ web hiện tại, từ phía máy chủ, hãy gọi cho dịch vụ web bảo mật khác. Ngay cả bây giờ bạn có thể cấu hình yêu cầu đến của bạn cho một số IP máy cụ thể.

Trong trường hợp này ngoài máy chủ của riêng bạn, không có người nào khác có thể truy cập dịch vụ web được giữ an toàn phía sau tường lửa. Nó là một cái gì đó tương tự như chúng tôi làm trong khi kết nối với máy chủ cơ sở dữ liệu từ máy chủ ứng dụng.

Hãy cho tôi biết nếu điều này có ích.

5

Tôi sẽ nêu những vấn đề trả lời của tôi là hy vọng để giải quyết:

  1. Giả sử bạn lưu trữ dịch vụ của bạn trên một máy khác so với máy chủ web, vấn đề là bạn cung cấp cho những kẻ tấn công tiềm năng tên/địa chỉ của các máy đó.

  2. Kẻ tấn công có thể viết tập lệnh/chương trình để xóa dữ liệu của bạn.

  3. Những kẻ tấn công có thể tập trung vào các dịch vụ web của bạn và cố gắng hack chúng/truy cập vào mạng của bạn.

  4. Kẻ tấn công có thể cố gắng thực hiện DoS/DDoS trên dịch vụ web của bạn.

Giải pháp tôi đã sử dụng trước đây là tạo proxy trọng lượng nhẹ trên máy chủ web sao cho tất cả các cuộc gọi AJAX chỉ đơn giản là trỏ trở lại miền hiện tại. Sau đó, khi một cuộc gọi đến, nó chỉ đơn giản là chuyển đến dịch vụ web thích hợp, được lưu trữ một nơi nào đó trong nội bộ trên mạng.

Nó tạo ra một hop thêm trên mạng, nhưng nó cũng có những lợi ích sau:

  1. Nó ẩn IP thực tế của máy lưu trữ dịch vụ của bạn.
  2. Bạn có thể dễ dàng khóa máy chủ web đó và theo dõi hoạt động bất thường. Nếu bạn thấy hoạt động tăng đột biến, bạn có thể tắt các dịch vụ web. (Nếu bạn sử dụng một máy khác, bạn sẽ phải theo dõi hai hộp. Không phải là vấn đề lớn, nhưng dễ giám sát hơn.)
  3. Bạn có thể dễ dàng đặt lớp đệm được phân phối trong proxy. Điều này bảo vệ bạn khỏi các cuộc tấn công tải/từ chối dịch vụ (DoS) và rõ ràng là hỗ trợ lưu lượng dịch vụ web bình thường.
  4. Bạn có thể ẩn xác thực ở cấp proxy. Các cuộc gọi công khai sẽ không phản bội lược đồ xác thực của bạn. Nếu không, kẻ tấn công có thể xem mã thông báo hoặc khóa hoặc bí mật hoặc bất kỳ thứ gì bạn sử dụng. Thực hiện proxy trên máy chủ web sẽ ẩn thông tin đó. Các dữ liệu vẫn sẽ chảy qua, nhưng một lần nữa bạn có thể theo dõi nó.

Lợi ích thực sự theo ý kiến ​​của tôi là nó làm giảm diện tích bề mặt của ứng dụng mà thu hẹp những gì kẻ tấn công có thể làm.

2

Vì bạn tham khảo ASP.Net, nên biết rõ viewstate của nó có thể dễ dàng được giải mã. Không có cách nào để bảo vệ mã của bạn (không phải để nói các url được gọi). Nếu bạn là dịch vụ web được gọi với một số thông số có thể cho phép hành động không hạn chế và nguy hiểm, thì bạn nên bắt đầu sử dụng một số người dùng/vai trò/quản lý quyền.

Nếu bạn lo lắng về các cuộc tấn công "người đàn ông ở giữa", bạn nên chọn https.

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