2010-07-16 14 views
7

Nhiều lần tôi làm một số điều kỳ lạ khi sử dụng jquery ajax. Ý tôi là, tôi giữ một biến ẩn chứa id và sau đó khi ai đó nhấp vào button, tôi chạy một hàm javascript để chuyển yêu cầu ajax cùng với id được chứa trong hidden field. Điều này có bình thường không? Nếu ai đó sử dụng firebug hoặc bất kỳ công cụ nào như vậy và thay đổi chức năng javascript và chuyển một số khác ids? Nó sẽ cập nhật và xóa các bản ghi khác có thể không thuộc về người dùng đó? Làm thế nào để tất cả các bạn xử lý này?Ai có thể hack yêu cầu ajax của tôi trong jquery không?

Trả lời

14

Bạn cần để bảo vệ phía máy chủ này, bạn không thể bảo vệ nó ở phía máy khách, cũng không nên bạn.

JavaScript có thể xem, thực thi, động, mở ... đó là mọi thứ bạn muốn khi làm ... tốt, bất cứ điều gì bạn muốn với nó, điều rất xấu cho bảo mật. Bạn cần phải kiểm tra id được thông qua dựa vào những gì người dùng có quyền truy cập vào máy chủ khi xử lý yêu cầu.

Bất cứ điều gì, và tôi có nghĩa bất cứ điều gì bạn làm trên máy khách là một răn đe, không phải là một giải pháp , và thực sự không có răn đe JavaScript hiệu quả mà tôi từng thấy. Ngay cả khi bạn có thể bảo mật, tôi chỉ có thể mở Firebug, Fiddler, Wireshark, bảng điều khiển Chrome hoặc một trong hàng tá công cụ khác để xem yêu cầu nào cuối cùng vẫn gửi đi.

+0

Vì vậy, điều này có nghĩa là không có cách an toàn để gửi xmlHttpRequests? – adardesign

+0

@adardesign - * Gửi *, chắc chắn, SSL chẳng hạn ... * những gì họ đang gửi, không, khách hàng có thể đẩy bất kỳ thứ gì vào đó và rất dễ dàng thay đổi những gì nó đang làm trong JavaScript. Không bao giờ tin tưởng đầu vào của bạn, xác minh nó :) –

6

Không bao giờ tin tưởng đầu vào của người dùng của bạn: xác thực id trên máy chủ.

2

Bạn nên luôn kiểm tra đầu vào ở phía máy chủ khi dữ liệu được gửi. Ví dụ: nếu người dùng đang chỉnh sửa tiểu sử của họ trên trang web, bạn sẽ không đặt ID tiểu sử trong biến ẩn, bạn sẽ lấy được ID tiểu sử dựa trên cookie/phiên người dùng khi dữ liệu được gửi. Cụm từ chính là hoàn toàn không bao giờ tin tưởng khách hàng.

+0

Xin chào Fosco, tôi đã nhận bạn. Và tôi đang làm điều đó chỉ khi đó là một kỷ lục duy nhất. Điều gì sẽ xảy ra nếu một số bảng được hiển thị trên trang có 10 bản ghi. Giả sử người dùng có quyền chỉnh sửa các album đó vì chúng là của riêng mình. Bây giờ những album này có id album riêng của họ. Làm thế nào để tôi xử lý này? Tôi có nên đổ tất cả id của album trong phiên và trong khi gửi kiểm tra id album không? Có rất nhiều trường hợp như vậy mà tôi cần bàn. Tôi có nên đặt tất cả các id trên mỗi phiên bản trong phiên? Nếu có, thì khi nào tôi nên đặt chúng trong phiên? Chỉ khi anh ta đăng nhập? Đó là bản chất có nghĩa là tôi nên tham gia không cần thiết mà là ... – TCM

+0

không cần thiết khi người dùng đăng nhập? Tôi hy vọng tôi rõ ràng. Vui lòng cho tôi biết nếu tôi không rõ. – TCM

+0

Nếu bạn có thể hiển thị các album là 'của anh ấy', thì bạn có thể xác định đó là 'anh ấy' khi gửi biểu mẫu. Bạn không cần lưu trữ thêm bất kỳ thứ gì trong phiên để thực hiện việc này. – Fosco

1

Bạn phải thực hiện xác thực phía máy chủ để đảm bảo rằng người dùng hiện tại được phép thực hiện tác vụ dựa trên người dùng và ngữ cảnh hiện tại. Như bạn đã lưu ý, bất kỳ ai có bằng chứng xác thực hợp lệ đều có thể sửa đổi các giá trị đang được chuyển lại - họ không cần sửa đổi mã của bạn, họ có thể chỉ cần tạo yêu cầu chứa bất kỳ loại giá trị nào họ muốn nếu họ có thông tin cookie chính xác.

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