Điểm:1

làm mới form_token với trang làm mới

lá cờ ru

Thật không may, form_token không thay đổi khi tôi làm mới các trang biểu mẫu. Điều này không gây ra rủi ro lạm dụng và bảo mật? Có ai có thể giải thích những gì Drupal làm cho CSRF dưới mọi hình thức không? Cảm ơn

Điểm:3
lá cờ cg

Như định nghĩa của CSRF nói

Mã thông báo CSRF là mã thông báo ngẫu nhiên an toàn (ví dụ: mã thông báo đồng bộ hóa hoặc challenge token) được sử dụng để ngăn chặn các cuộc tấn công CSRF. Mã thông báo cần là duy nhất cho mỗi phiên người dùng và phải có giá trị ngẫu nhiên lớn đối với làm cho nó khó đoán. Một ứng dụng bảo mật CSRF chỉ định một Mã thông báo CSRF cho mỗi phiên người dùng.

nó bảo vệ BE để đảm bảo rằng dữ liệu được đăng lên BE đến từ một biểu mẫu do BE tạo ra trừ khi bất kỳ ai cũng có thể đăng dữ liệu lên BE từ bất kỳ nguồn nào.

ví dụ: trong biểu mẫu đăng nhập, tin tặc có thể viết mã để thử một số kết hợp (tất nhiên drupal có chính sách thử lại tối đa để ngăn người dùng thử sai mật khẩu hơn 5 lần và có tính năng phát hiện lũ trong drupal để ngăn chặn tấn công vũ phu ). Tuy nhiên, các biểu mẫu không có bảo vệ CSRF là nơi tốt để bot và kẻ gửi thư rác đăng dữ liệu sang một bên nhiều lần.

Vì vậy, sẽ tốt hơn nếu các biểu mẫu của bạn được mở để ẩn danh bảo vệ chúng hũ mật ong và một giải pháp phát hiện con người ( captcha, Hình ảnh xác thực lại, Recaptcha 3 hình ảnh xác thực toán học, v.v.).

ngoài ra, có Mô-đun Bộ bảo mật làm cho nó an toàn hơn.

Cập nhật phần sau khi tôi nhận thấy nó đang xảy ra với người dùng đã đăng nhập vì những lý do tôi đã đề cập ở trên, đặc biệt là để có các chức năng lưu trữ tốt hơn, đối với người dùng ẩn danh, nó không được làm mới. Nhưng đối với người dùng đã đăng nhập sau khi kiểm tra cấp độ mã, tôi nhận ra đó không phải là lỗi.

nó được tạo dựa trên form_id và cho đến khi bạn chưa gửi biểu mẫu, nó sẽ giống như vậy và việc làm mới không tạo ra một biểu mẫu mới. Cho nên, form_tokenform_build_id là những thứ bảo vệ hình thức khỏi.

để tham khảo và nhận được nhiều hơn hãy xem trên:

    // Thêm mã thông báo, dựa trên #token hoặc form_id, vào bất kỳ biểu mẫu nào được hiển thị cho
  // người dùng xác thực.Điều này đảm bảo rằng mọi biểu mẫu được gửi thực sự
  // được người dùng yêu cầu trước đó và bảo vệ chống lại yêu cầu trang chéo
  // giả mạo.
  // Điều này không áp dụng cho các biểu mẫu được gửi theo chương trình. Hơn nữa,
  // vì mã thông báo bị ràng buộc phiên và biểu mẫu hiển thị cho người dùng ẩn danh là
  // rất có thể đã được lưu vào bộ đệm, chúng tôi không thể gán mã thông báo cho chúng.
  // Trong quá trình cài đặt chưa có $user.
  // Trình tạo biểu mẫu có thể đặt rõ ràng #token thành FALSE khi chéo trang
  // yêu cầu giả mạo không liên quan đến biểu mẫu, chẳng hạn như biểu mẫu tìm kiếm.
  nếu ($form_state
    ->isProgrammed() || isset($form['#token']) && $form['#token'] === FALSE) {
    bỏ đặt($form['#token']);
  }
  khác {
    $form['#cache']['contexts'][] = 'user.roles:authenticated';
    nếu ($ người dùng && $ người dùng
      ->isAuthenticated()) {

      // Tạo mã thông báo công khai và trình giữ chỗ dựa trên ID biểu mẫu.
      $placeholder = 'form_token_placeholder_' . Mật mã::hashBase64($form_id);
      $form['#token'] = $placeholder;
      $form['form_token'] = [
        '#id' => Html::getUniqueId('edit-' . $form_id . '-form-token'),
        '#type' => 'mã thông báo',
        '#default_value' => $placeholder,
        // Quá trình xử lý và xác thực biểu mẫu yêu cầu giá trị này. Đảm bảo
        // giá trị biểu mẫu đã gửi xuất hiện theo nghĩa đen, bất kể #tree tùy chỉnh
        // và #parents được đặt ở nơi khác.
        '#cha mẹ' => [
          'form_token',
        ],

Thẩm quyền giải quyết : https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21FormBuilder.php/function/FormBuilder%3A%3AprepareForm/9.3.x

lá cờ ru
Cảm ơn bạn thân yêu @Yuseferi. Nhưng câu hỏi của tôi là tại sao mã thông báo không thay đổi trên trang làm mới và đây có phải là lỗi Drupal không? Hoặc Drupal kiểm soát CSRF bằng các phương pháp khác, chẳng hạn như sử dụng cookie hoặc các phương pháp phổ biến khác
Yuseferi avatar
lá cờ cg
@reza Tôi tin rằng đó không phải là lỗi. bởi vì việc thêm CSRF vào tất cả các biểu mẫu ẩn danh sẽ gây ra một số vấn đề với bộ nhớ đệm. và nó cố ý không tạo CSRF cho các biểu mẫu ẩn danh. tất nhiên, có một số cookie phiên để theo dõi người dùng nhưng nó không tham gia vào việc gửi biểu mẫu và việc gửi biểu mẫu có thể dễ dàng bị bắt chước bởi một tập lệnh. đó là lý do thường phải đối mặt với rất nhiều thư rác trên các hình thức ẩn danh.
lá cờ ru
Tôi không có nghĩa là một người dùng ẩn danh.Theo như tôi biết CSRF hợp lệ đối với người dùng được xác thực và phương pháp này được tạo để ngăn gửi trái phép
Yuseferi avatar
lá cờ cg
câu trả lời @reza được cập nhật
Điểm:2
lá cờ id

Mã thông báo chống CSRF của Drupal hoạt động bằng cách kết hợp thông tin bí mật đối với trang web, hành động và người dùng cá nhân thành một giá trị băm được gửi trong HTML của trang.

Từ https://www.drupal.org/node/2319205

leymannx avatar
lá cờ ne
"và người dùng cá nhân". Đó là một điều dựa trên phiên. Đó là lý do tại sao nó không thay đổi khi chỉ xóa bộ đệm.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.