Nonce trong WordPress là gì? ~ Kiếm Tiền Online

Sunday, February 4, 2024

Nonce trong WordPress là gì?

WordPress cung cấp một hệ thống nonce dễ tiêu dùng để tạo và xác minh các hàm băm cho các hành động nhất định. Nonce giúp bảo vệ khỏi một số loại tấn công như Cross Site Request Forgery (CSRF)

Nonces là gì?

Theo định nghĩa, nonce là thứ chỉ được tiêu dùng một lần và không lặp lại.

None là những hàm băm được tạo thành từ các con số và chữ cái. Chúng chỉ được tiêu dùng một lần và có vòng đời giới hạn, có nghĩa là sau một khoảng thời gian nhất định chúng sẽ hết hạn tiêu dùng. Trong suốt vòng đời của nó, nonce sẽ vẫn giữ nguyên và sẽ liên quan đến một người dùng và ngữ cảnh cụ thể.

nonce trong wordpress là gì?

Nonce trong WordPress là gì?

Cách Nonces bảo vệ một trang web

Ví dụ: khi người dùng gửi biểu mẫu, một cuộc tấn công CSRF có thể buộc người dùng thực hiện các hành động không mong muốn. Tùy thuộc vào cấp độ truy cập của người dùng liên quan, thiệt hại có thể từ một địa chỉ email bị thay đổi ngay đến toàn bộ trang web bị xâm phạm.

Để tránh điều này, một nonce được thêm vào URL được gửi tương ứng để được đánh giá và chỉ sau đó cho phép hành động hoàn tất nếu giá trị đó chính xác và chưa hết hạn.

Một ví dụ phổ biến về việc tiêu dùng nonce trong WordPress là khi xóa một bài đăng.

nonce delete post

Hành động xóa bài viết này tương ứng với url phía dưới đây nếu không có nonce

https://truongcongthang.com/wp-admin/post.php?post=98&action=trash

Trong trường hợp này, kẻ tấn công có thể tận dụng liên kết không an toàn này khiến bạn vô tình xóa bài đăng của mình khi chỉ cần thay đổi ID của bài viết. Đây được gọi là một cuộc tấn công Cross-Site.

Trong trường hợp trên, nếu bạn thêm nonce vào sẽ dẫn đến phản hồi “403 Forbidden” vì URL của tin tặc sẽ thiếu xác minh bổ sung nonce.

URL mà WordPress thường tạo khi bạn chuẩn bị xóa một bài đăng như sau:

https://truongcongthang.com/wp-admin/post.php?post=98&action=trash&_wpnonce=f29c5da097

_wpnonce=f29c5da097 đảm bảo rằng chỉ bạn mới có thể thực hiện các tác vụ như xóa bài đăng trên trang web của bạn.

Ở mỗi ngữ cảnh cụ thể _wpnonce=f29c5da097 sẽ khác nhau ví dụ, user A sẽ có _wpnonce khác va user B có user khác vì vậy nó đảm bảo website được xác thực và dựa vào quyền có thể thao tác current_user_can()

Nonces và WordPress

Khi quản lý một trang web WordPress, các ký tự không phải do chính WordPress tạo ra để bảo vệ các URL và biểu mẫu của bạn không bị lạm dụng. Vì vậy, trừ khi bạn đang phát triển các chủ đề hoặc plugin, nếu không, bạn sẽ không bao giờ phải lo lắng về các lỗi không cần thiết vì mọi thứ đều do WordPress chăm sóc.

Tuy nhiên, khi xây dựng một chủ đề hoặc plugin với tư cách là một nhà phát triển, bạn nên tự xử lý các nonces bằng cách tiêu dùng các chức năng mà WordPress cung cấp cho mục đích đó.

Để tạo Nonce, bạn có thể tiêu dùng hàm wp_nonce_url() để thêm nonce vào URL, wp_nonce_field() để thêm nonce vào biểu mẫu hoặc wp_create_nonce() nếu bạn muốn tiêu dùng nonce theo cách tùy chỉnh, như trong một đề nghị AJAX.

Khi nói đến việc xác minh các nonces, bạn có thể tiêu dùng hàm check_admin_referer() để xác minh một nonce đã được chuyển trong URL hoặc một biểu mẫu trong màn hình quản trị, hàm check_ajax_referer() sẽ đánh giá nonce và nếu nó không thành công thì theo mặc định sẽ chấm dứt thực thi tập lệnh và hàm wp_verify_nonce() để xác minh một nonce được truyền trong một số ngữ cảnh khác.

Cách tiêu dùng Nonce trong WordPress

Giả sử với link xóa bài như bên trên bằng code thay vì click vào url, mình cần tạo ra 1 nonce, đưa nonce này vào query string, bên trang xử lý sẽ xác nhận nonce thông qua query string.

$nonce = wp_create_nonceundefined' delete_98'); //tạo nonceecho '<a href="http://domain/?action=delete&id=98&_nonce='.$nonce.'">Xóa</a>';

Các bạn thấy đấy, mình đã tạo thêm 1 nonce với $action truyền vào là delete_98. Và mình đã đưa nó vào query string để verify bên trang xử lý. Tên _nonce các bạn có thể đổi lại tùy ý. Lưu ý: với $action các bạn đặt như thế nào thì trang xử lý các bạn phải verify lại như thế đó.

Bên trang xử lý các bạn chỉ cần xác nhận cái nonce này trước khi xử lý. Không hợp lệ thì ngưng xử lý:

ifundefined!wp_verify_nonceundefined$_GET['_nonce'], 'delete_'.$_GET['id'])) exitundefined); //code xử lý ở đây ....

Bên trang xử lý chúng ta verify nonce thông qua hàm wp_verify_nonce. Với $nonce là $_GET[‘_nonce’], và $action là ‘delete_’.$_GET[‘id’]. Vì ở trên nonce được tạo từ ‘delete_1′ nên trang xử lý cần verify đúng $action đó theo dạng delete_{id}.

Thực chất hàm này sẽ tạo ra 1 nonce khác theo $action và so sánh nó với nonce get được.

nonce_field trong form

Trong thực tế code thì form bạn nên tiêu dùng nonce_field cụ thể như ví dụ sau:

<form method="POST">    <?php wp_nonce_field( 'your_nonce_action', 'your_nonce_field' ); ?>    ....</form>

Để xác minh tính hợp lệ của nonce, bạn có thể tiêu dùng wp_verify_nonce()

if ( ! isset( $_POST['your_nonce_field'] )     || ! wp_verify_nonce( $_POST['your_nonce_field'], 'your_nonce_action' ) ) {   // nonce did not verify.} else {   // process form data}

Đơn giản thế thôi, ngoài cách tiêu dùng trên wordpress còn cung cấp các hàm để tạo và đánh giá nonce khác để vận dụng vào từng trường hợp cụ thể.

Kết luận

Cross Site Request Forgery (CSRF) là một lỗ hổng nổi tiếng trong thế giới WordPress và do đó, điều quan trọng là phải tích cực bảo vệ chống lại nó. Nonces rất quan trọng trong việc giúp ngăn chặn cuộc tấn công CSRF và luôn phải được tiêu dùng khi cần thiết.


0 nhận xét:

Post a Comment

DUNG DỊCH TẮM GỘI KHÔ – PH
90.000₫
MẶT NẠ TÓC PHỤC HỒI HƯ TỔN PREMIUM REPAIR MASK 180G – TSUBAKI
225.000₫
BỒ KẾT HOA BƯỞI 300ML – NCT3
340.000₫
DẦU XẢ THẢO DƯỢC BỒ KẾT SẢ CHANH HOA BƯỞI 300ML – TRƯỜNG HƯNG THỊNH
100.000₫
DẦU GỘI THẢO DƯỢC BỒ KẾT SẢ CHANH HOA BƯỞI 300ML – TRƯỜNG HƯNG THỊNH
100.000₫
SERUM DƯỠNG TÓC HOA BƯỞI GIẢM GÃY RỤNG 50ML – POMELO
84.000₫

Featured Post

Cài đặt Thanh Toán Google adsense bằng ngân hàng Vietcombank

Sau khi đã đủ điều kiện rút tiền từ Google Adsense thì bạn cần phải thêm hình thức thanh toán để Google trả tiền cho bạn.Khi kiếm tiền trên ...

LAPTOP

44.990.000đ
Laptop LG Gram 2022 17Z90Q-G.AH76A5 (Core-i7 1260P/16GB/512GB/17″ WQXGA/Win 11/Xám)
24.790.000đ
Laptop LG Gram 2021 16ZD90P-G.AX54A5 (i5-1135G7/8GB RAM/512GB SSD/16″WQXGA/Dos/Trắng)
14.590.000đ
Laptop Acer Gaming Aspire 7 A715-42G-R4ST NH.QAYSV.004 (R5 5500U/8GB RAM/256GB SSD/15.6″FHD IPS/GTX1650 4GB/Win10) – Hàng chính hãng
15.190.000đ
Laptop Acer Aspire 3 A315-58G-50S4 (Core i5 1135G7/8GB RAM/512GB/15.6″FHD/MX350 2GB/Win 10/Bạc)
21.990.000đ
Laptop Acer Swift 5 SF514-55TA-59N4 NX.A6SSV.001 (i5-1135G7/16GB RAM/1TB SSD/14″FHD_Touch/Win10/Xanh) – Hàng chính hãng
14.890.000đ
Laptop Acer Aspire 5 A514-54-59QK (Core i5 1135G7/8GB RAM/512GB/14″FHD/Win 11/Vàng)

Vay Tiêu Dùng Online

(x)
(x)