本篇文章更新時間:2020/10/21
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持


前陣子網站上一直都有機器人成功留言,也不是說沒用 Google reCAPTCHA,但神奇的事:沒效!

想說好吧,內建的功能無法抵擋就來增加點機器人攻擊的難度,讓網站行為與「普通 WordPress 搭配 Contact Form 7 的網站」不同就可以避開了。

研究一下 Contact Form 7(下略稱 CF7),把功能短碼繼承出來,改變前端呈現的作法。

程式碼如下:

function mxp_wpcf7_contact_form_tag_func($atts, $content = null, $code = '') {
    if (is_feed()) {
        return '

錯誤: 找不到符合條件的聯絡表單。

'; } $atts = shortcode_atts( array( 'id' => 0, 'title' => '', 'html_id' => '', 'html_name' => '', 'html_class' => '', 'output' => 'form', ), $atts, 'wpcf7' ); $id = (int) $atts['id']; $title = trim($atts['title']); if (!$contact_form = wpcf7_contact_form($id)) { $contact_form = wpcf7_get_contact_form_by_title($title); } if (!$contact_form) { return sprintf( '

錯誤: 找不到符合條件的聯絡表單。

', esc_html(__('Not Found', 'contact-form-7')) ); } $f = array(); $f['html'] = $contact_form->form_html($atts); $j = "var mxp_f_{$id}=" . json_encode($f) . ";"; $script = "<p id='mxp_f_{$id}'></p><script>{$j}jQuery(document).ready(function(){jQuery('#mxp_f_{$id}').html(mxp_f_{$id}['html']);});</script>"; return $script; //$contact_form->form_html($atts); } add_shortcode('mxp_contact-form-7', 'mxp_wpcf7_contact_form_tag_func');

原本是直接將表單 HTML 標籤輸出,現在改透過 JavaScript 來包過回寫插入網站。

透過這招,就能避開「不會執行 JavaScript」的機器人了,有沒有可能還是被破?有!但難度高不少,我這小站不值得拉XD

這段程式貼到(子)主題中的 functions.php 裡後,還要把原本插入表單的短碼補上 mxp_ 開頭。

例如:

原本的 CF7 表單代碼是: [ contact-form-7 id="88" ] 改成 [ mxp_contact-form-7 id="88" ]

透過改變短碼來切換使用的程式碼片段,不想使用時改回原本的就好囉!執行的結果都是一樣的,肉眼看不出差異,但對機器人來說就是完全不一樣了。

想了解其他 CF7 玩法,可以點擊網站上的標籤找尋其他文章: Contact Form 7


Share:

作者: Chun

WordPress 社群貢獻者、開源社群推廣者。專注於 WordPress 外掛開發、網站效能最佳化、伺服器管理,以及 iDempiere 開源 ERP 導入與客製開發。曾參與 WordCamp Taipei 等社群活動,GitHub Arctic Code Vault Contributor。提供資訊顧問、WordPress 開發教學、主機最佳化與企業 ERP 整合服務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Mastodon