Kinh nghiệm với việc thêm Nonces vào mẫu bình luận


7

Tôi đã tự hỏi về tác động của các lực lượng sẽ có trên mẫu nhận xét mặc định mà một chủ đề có. Bởi vì Nonces là một tính năng tích hợp sẵn của WordPress, tôi nghĩ về việc dùng thử.

Có ai đó đã thực hiện nonces trong các hình thức bình luận tiêu chuẩn? (không thể tưởng tượng rằng tôi là người đầu tiên nghĩ về điều đó ...!)

Ai đó có thể đề xuất một plugin đã có sẵn thực hiện công việc hoặc cung cấp đoạn mã tích hợp Trường WP Nonce vào biểu mẫu nhận xét chủ đề và kiểm tra xem khi biểu mẫu được gửi không?

Câu trả lời:


5

Tôi đã không làm điều này cá nhân, nhưng nó sẽ khá dễ dàng. Nếu bạn đang xây dựng mẫu nhận xét của mình theo cách thủ công, ngay trước khi kết thúc </form>đặt:

<?php wp_nonce_field( 'comment_nonce' ) ?>

Sau đó, chỉ cần móc vào pre_comment_on_posthành động kích hoạt khi bạn gửi nhận xét:

add_action( 'pre_comment_on_post', 'my_verify_comment_nonce' );

function my_verify_comment_nonce() {

    check_admin_referer( 'comment_nonce' );

}

Nếu bạn muốn chỉ móc vào mẫu nhận xét tiêu chuẩn mà Twenty Ten sử dụng ( comment_form()) thì thay vào đó bạn có thể móc vào comment_formnhư vậy:

add_action( 'comment_form', 'my_add_comment_nonce_to_form' );

function my_add_comment_nonce_to_form() {

    wp_nonce_field( 'comment_nonce' );

}

Chưa được thử nghiệm, vì vậy hãy cho tôi biết nếu bạn có bất kỳ vấn đề nào!


1
Oh tôi sẽ thử và sau đó cung cấp một bản vá lõi nếu nó có vẻ phù hợp. Nên ngăn những kẻ gửi thư rác một yêu cầu vào bình luận nữa. check_admin_Vferer () có thể bị sử dụng sai, vì đó không phải là quản trị viên - hay là vậy? Cần xem xét cách bình luận được lưu trữ.
hakre

3
Theo tôi biết, không có vấn đề gì với việc sử dụng check_admin_referer(), tôi nghĩ rằng tên này là một chút sai lệch.
Joe Hoyle

Tôi sẽ đánh giá điều này như đã trả lời hoặc thời điểm này vì nó có vẻ phù hợp. Cám ơn vì đã chia sẻ!
hakre
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.