2008-09-01 37 views
19

Tôi đang sử dụng jquery ajax để đăng cập nhật về máy chủ của mình. Tôi lo ngại về việc đảm bảo rằng tôi đã đưa ra các biện pháp thích hợp để chỉ các cuộc gọi AJAX của tôi mới có thể đăng dữ liệu.Tư vấn bảo mật cho bài đăng dữ liệu jquery ajax?

Ngăn xếp của tôi là PHP trên Apache dựa vào chương trình phụ trợ của MySQL.

Lời khuyên được đánh giá cao!

Trả lời

27

Bất kỳ yêu cầu nào về các cuộc gọi AJAX trong các trang của bạn cũng có thể được thực hiện bởi người nào đó bên ngoài ứng dụng. Nếu được thực hiện đúng, bạn sẽ không thể biết liệu chúng có được thực hiện như là một phần của cuộc gọi AJAX từ webapp của bạn hay bằng tay/các phương tiện khác. Có hai kịch bản mà tôi có thể nghĩ đến khi bạn nói rằng bạn muốn đảm bảo rằng chỉ các cuộc gọi AJAX mới có thể đăng dữ liệu: bạn không muốn người dùng độc hại có thể đăng dữ liệu gây trở ngại cho dữ liệu của người dùng khác hoặc bạn thực sự muốn hạn chế các bài đăng nằm trong "luồng" của thao tác đa yêu cầu.

Nếu bạn quan tâm đến trường hợp đầu tiên (ai đó đăng dữ liệu độc hại đến/là một người dùng khác), giải pháp là như nhau dù bạn đang sử dụng AJAX hay không - bạn chỉ cần xác thực người dùng thông qua bất kỳ phương tiện nào là cần thiết - - thường thông qua cookie phiên.

Nếu bạn quan tâm đến trường hợp thứ hai, thì bạn sẽ phải thực hiện một việc như mã thông báo duy nhất ở mỗi bước của quy trình và lưu trữ mã thông báo dự kiến ​​ở phía máy chủ. Sau đó, khi một yêu cầu được thực hiện, hãy kiểm tra xem có mục nhập tương ứng ở phía máy chủ cho hành động đang được thực hiện và các mã thông báo dự kiến ​​phù hợp và mã thông báo đó chưa được sử dụng chưa. Nếu không có, bạn từ chối yêu cầu, nếu có, thì bạn đánh dấu mã thông báo đó là đã sử dụng và xử lý yêu cầu.

Nếu những gì bạn quan tâm là một cái gì đó khác với một trong hai trường hợp này thì câu trả lời sẽ tùy thuộc vào chi tiết cụ thể hơn bạn đã cung cấp.

+2

Sự cố với xác thực cookie phiên là không đủ để ngăn các cuộc tấn công CSRF. Đó là một ý tưởng tốt để đưa vào một số lớp bảo mật bổ sung - cho dù bạn có đang sử dụng ajax hay không. http://en.wikipedia.org/wiki/Csrf –

+0

@ JesseHallett, Xin chào, tôi đang sử dụng Spring Securiy làm lớp bảo mật của mình và tôi đang tạo yêu cầu đăng bài AJAX từ phía khách hàng. Tôi đã bật mã thông báo CSRF để có một mã thông báo máy khách của máy chủ tại mỗi yêu cầu, mà tôi đang chuyển qua trong các yêu cầu bài đăng AJAX. Thủ tục của tôi có đủ an toàn không? –

5

Sử dụng các phiên để đảm bảo rằng mọi bài đăng Ajax được thực hiện trong ngữ cảnh được xác thực. Hãy suy nghĩ về mã Ajax của bạn giống như một máy khách khác cho máy chủ của bạn, nó sẽ trở nên dễ dàng hơn để giải quyết các vấn đề xác thực theo cách đó.

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