CSRF bảo vệ drupal lưu trữ
Tôi có một số kịch bản PHP POST mà tôi cần để bảo vệ khỏi sự tấn công CSRF và có nhiều câu hỏi:
1) Nếu tôi gửi yêu cầu POST để PHP sử dụng jquery mà không có một hình thức HTML, chỉ cần nhận được giá trị trực tiếp từ các yếu tố HTML và trình sử dụng jquery, tôi vẫn có nguy cơ bị CSRF?
2) Khi người dùng đăng nhập vào trang web, tôi lưu trữ thẻ duy nhất của họ trong một biến phiên. Trong kịch bản PHP POST tôi kiểm tra nếu điều đó biến session được thiết lập và có giá trị như nhau Tôi đặt trước. Mà không phải là đủ? tại sao nó cần thiết cho các thẻ được đưa vào dưới dạng HTML là tốt?
hỏi ngày 15 tháng 11 '14 tại 23:43
- Vâng. Nó không quan trọng như thế nào bạn xây dựng theo yêu cầu, những kẻ tấn công có thể xây dựng một trong cùng một cách. (Về lý thuyết bạn có thể làm tính năng của một yêu cầu phức tạp (mà sẽ kích hoạt một yêu cầu preflight CORS) bắt buộc, vì vậy mà một trang web khác không thể có được trình duyệt của người dùng để sao chép toàn bộ yêu cầu, nhưng tôi không muốn phụ thuộc vào đó) .
- Không
Mục đích của các mã thông báo là để kiểm tra xem các trang có chứa mã chịu trách nhiệm về quyết định những gì diễn ra trong yêu cầu (ví dụ: hình thức hoặc JavaScript) là một trang trên website của bạn.
Nếu hình thức (hay JavaScript) có thể đọc một mã thông báo (mà phù hợp với một trong phiên) từ HTML của trang và đặt nó trong yêu cầu, sau đó bạn biết mã đó xây dựng các yêu cầu đến từ trang web của bạn.
Nếu bạn chỉ cần kiểm tra xem nó là trong phiên giao dịch, sau đó tất cả các bạn đang kiểm tra là người sử dụng đã gây ra một mã thông báo được tạo ra (mà thường chỉ có nghĩa là quý khách đến thăm bất kỳ trang nào trên trang web của bạn ... mà có thể là trong một khung ẩn).
được. những gì về nếu kẻ tấn công có JS có thể bao gồm các HTML FORM thực tế từ trang web của tôi vào một iframe ẩn. Tôi đã nhìn thấy nó trong một ví dụ khác, sẽ không phải là dấu hiệu được đưa vào biểu mẫu nếu người dùng truy cập các trang web tấn công trong khi đăng nhập? Trong trường hợp này yêu cầu sẽ được xác thực vì mã thông báo là có trong hình thức và trong phiên hoặc tôi thiếu cái gì? - Michael Samuel 15 Tháng 11 '14 tại 23:58
Số Nếu bạn đặt một khung bên trong một hình thức, lĩnh vực trong trang nạp bởi khung sẽ không được đưa vào dữ liệu mẫu. Bạn không thể đọc được dữ liệu trên các lĩnh vực thông qua một khung với JavaScript (trừ khi trang web hợp tác với postMessage, mà bạn sẽ không được). - Quentin 16 Tháng 11 '14 tại 00:02
Có nó vẫn không an toàn
Một CSRF token phải là một dấu hiệu tươi tạo ra cho mỗi khi bạn tạo một biểu mẫu. Nó cần phải là duy nhất và không thể đoán trước cho mỗi yêu cầu. Một dấu hiệu phiên thiết lập từ đăng nhập là chỉ duy nhất cho toàn bộ phiên đăng nhập.
Và nếu bạn không gửi token tạo ra để kiểm tra, nơi nào bạn kiểm tra xem nó? Bạn phù hợp với thẻ phiên với. Lý do tại sao là bởi vì bạn vẫn có thể cung cấp cho mọi người khả năng để làm giả mạo yêu cầu, nếu thẻ không được gửi với yêu cầu riêng của mình, nhưng tất cả kiểm tra được thực hiện bằng phiên / cookies. Nếu bạn chỉ kiểm tra phiên nó không làm gì chống lại CSRF. Nó cần phải được gửi trong yêu cầu riêng của mình và kiểm tra nếu nó phù hợp với phiên của bạn. Khi bạn tạo ra một dấu hiệu duy nhất cho mỗi yêu cầu, những kẻ xấu không thể giả mạo yêu cầu một ai đó.
đã trả lời 15 Tháng 11 '14 lúc 23:55