每一個(gè) CMS 系統(tǒng),用戶一旦多起來,垃圾評(píng)論就隨之而來了,反垃圾評(píng)論是 CMS 開發(fā)中的一項(xiàng)必不可少的工作,WordPress 官方專門開發(fā)了垃圾評(píng)論攔截的插件 Akismet,基本上可以攔截絕大多數(shù)垃圾評(píng)論了。對(duì)于不想使用插件的用戶,今天我們來介紹一種,簡單高效的方法。
什么是 wp_create_nonce?
wp_create_nonce 是 WordPress 跟據(jù)“當(dāng)前時(shí)間、$action 參數(shù)、和當(dāng)前用戶 id“生成隨機(jī)字符串的函數(shù),提交表單時(shí),WordPress 會(huì)對(duì)這個(gè)隨機(jī)字符串進(jìn)行驗(yàn)證,如果提交的字符串相同,則證明本次提交是合法的提交。如下,我們添加一個(gè)名為 comment_nonce 的隨機(jī)字符串到評(píng)論表單。
添加評(píng)論nonce到評(píng)論表單
add_action(comment_form_top, function ()
{
global $post;
$nonce = wp_create_nonce($post->ID); //生成nonce
echo '';
});
垃圾評(píng)論是怎么來的?
網(wǎng)絡(luò)上大部分垃圾評(píng)論是通過軟件模擬提交評(píng)論產(chǎn)生的,垃圾評(píng)論軟件通過模擬 WordPress 的評(píng)論數(shù)據(jù)(也就是昵稱、郵箱、網(wǎng)址、評(píng)論這些數(shù)據(jù)),提交到 WordPress。因?yàn)槭擒浖僮鞯?,提交評(píng)論的效率非常高,往往每分鐘能達(dá)到成百上千條。
怎么通過 wp nonce 防止垃圾評(píng)論
垃圾評(píng)論軟件提交的評(píng)論數(shù)據(jù)都是實(shí)現(xiàn)準(zhǔn)備好的,其他的數(shù)據(jù)都可以事先寫好,但是,因?yàn)?comment_nonce 這個(gè)數(shù)據(jù)是隨機(jī)生成的數(shù)據(jù),是沒辦法事先寫好的。處理評(píng)論提交的時(shí)候,我們驗(yàn)證這個(gè)隨機(jī)數(shù)據(jù)就可以了,如果驗(yàn)證通過,說明是正常的評(píng)論,否則就可以認(rèn)為是垃圾評(píng)論,直接丟掉提交過來的評(píng)論數(shù)據(jù)就可以了。
用戶發(fā)表評(píng)論時(shí),處理評(píng)論數(shù)據(jù),驗(yàn)證隨機(jī)數(shù)。
add_action('preprocess_comment', function ($commentdata)
{
$comment_post_ID = $commentdata[ 'comment_post_ID' ];
$comment_content = $commentdata[ 'comment_content' ];
//檢查comment_nonce
$nonce = $_POST[ 'comment_nonce' ];
if ( ! isset($_POST[ 'comment_nonce' ]) || ! wp_verify_nonce($nonce, $comment_post_ID)) {
wp_die( 'You are robot?' );
}
$comment_content = strip_tags($comment_content); //過濾html標(biāo)簽
return $commentdata;
});
本功能我們使用了 wp_create_nonce 和 wp_verify_nonce 這兩個(gè) WordPress 函數(shù),除了評(píng)論,你還可以在其他需要提交表單地方使用這個(gè)方法來驗(yàn)證合法提交,過濾非法提交,從而保證 WordPress 站點(diǎn)的安全。


