ใครที่ใช้บอร์ด SMF หากต้องการให้บุคคลทั่วไปที่ไม่ได้สมัครสมาชิกสามารถโพสได้ ก็คงเจอกับปัญหา spam ที่โพตอัตโนมัติเข้ามาในบอร์ดนะครับ
ส่วนมาก spam จะโพสต์ลิ้งค์เข้ามาด้วย ผมมีวิธีแก้มาให้ลองครับ ซึ่งเป็นการกำหนดว่าหากไม่สมัครเป็นสมาชิกจะไม่สามารถโพตส์ข้อความที่มีลิ้งค์ได้
แต่หาก spam มันฉลาด มันสามารถสมัครสมาชิกเองได้ เราก็ไป Set ในระบบให้สมาชิกตั้งรหัสผ่านที่ยากขึ้น หรือให้สมาชิกยืนยันการสมัครผ่านอีเมลล์ แค่นี้เราก็ป้องกัน spam ได้แล้วครับ
มาเริ่มกันเลยครับ การกำหนดว่าหากไม่สมัครเป็นสมาชิกจะไม่สามารถโพตส์ข้อความที่มีลิ้งค์ได้
เข้าไปในไฟล์ ./Sources/Post.php
แล้วค้นหา
if (empty($modSettings['guest_post_no_email']))
{
if (!isset($_REQUEST['email']) || $_REQUEST['email'] == '')
$context['post_error']['no_email'] = true;
elseif (preg_match('~^[0-9A-Za-z=_+\-/][0-9A-Za-z=_\'+\-/\.]*@[\w\-]+(\.[\w\-]+)*(\.[\w]{2,6})$~', stripslashes($_REQUEST['email'])) == 0)
$context['post_error']['bad_email'] = true;
}
จากนั้นเพิ่มโค๊ดด้านล่างนี้ใว้ข้างหลังโค๊ดด้านบน
//ป้องกัน Spam
$linkpos = strpos ($_POST['message'], "://"); // look for ://
if ($linkpos !== false) $context['post_error']['guest_no_link'] = true; else { $linkpos = strpos ($_POST['message'], "www."); // look for www.
if ($linkpos !== false) $context['post_error']['guest_no_link'] = true;}
และค้นหา
// Now make sure this email address is not banned from posting.
isBannedEmail($_POST['email'], 'cannot_post', sprintf($txt['you_are_post_banned'], $txt[28]));
เพิ่มโค๊ดข้างล่างนี้หลังโค๊ดด้านบน
// ป้องกัน Spam
if (isset($_POST['message'])) { $linkpos = strpos ($_POST['message'], "://");
// look for ://
if ($linkpos !== false) $post_errors[] = 'guest_no_link'; else { $linkpos = strpos ($_POST['message'], "www.");
// look for www.
if ($linkpos !== false) $post_errors[] = 'guest_no_link'; } }
//
หลังจากนั้นเข้าไปที่ไฟล์ ./Themes/default/languages/Errors.thai.php
เพิ่มโค๊ดข้างล่างนี้เข้าไปในไฟล์ครับ ข้างล่างสุดก่อน ?>
$txt['error_guest_no_link'] = 'ขออภัย บุคคลทั่วไปไม่สามารถโพสลิงค์ได้ กรุณาลงทะเบียน';
เพียงเท่านี้เราก็หมดปัญหาเรื่อง spam
อ้างอิง :
http://www.justusers.net/forum/index.php?topic=561.0