Chặn spam link hiệu quả (phpBB3)

October 10, 2012
Hướng dẫn chặn spam link website trên phpBB3 hiệu quả
Hôm nay mình sẽ hướng dẫn các bạn cách thêm chức năng "Đưa 1 website bất kì vào danh sách đen của diễn đàn" vào mã nguồn phpBB3. Danh sách đen mình muốn nói ở đây là những địa chỉ website sẽ không được phép chèn vào bài viết khi gửi lên diễn đàn. Điều này sẽ hạn chế hiệu quả việc cố tình spam link website lên diễn đàn như hiện nay.
Trước khi đi vào phần hướng dẫn, mình xin lưu ý 1 chút: Mình được biết hiện tại có nhiều bạn sử dụng chức năng kiểm duyệt từ mặc định trên diễn đàn để ẩn (thay thế) địa chỉ website muốn cấm. Thế nhưng chức năng mặc định này chỉ có tác dụng khi người viết chèn link dạng URL mà thôi, nếu chèn link theo kiểu Anchor text thì xem như không tác dụng.
Hướng dẫn
Bước 1: Mở file adm/style/acp_words.html, tìm (bấm Ctrl+F):
<dl>
<dt><label for="replacement">{L_REPLACEMENT}</label></dt>
<dd><input id="replacement" type="text" name="replacement" value="{REPLACEMENT}" maxlength="255" /></dd>
</dl>
Chèn vào SAU đoạn mã vừa tìm được bằng đoạn mã bên dưới:
<dl>
<dt><label for="block">{L_BLOCK_WORD}</label></dt>
<dd><input id="block" type="button" value="{L_BLOCK}" class="button1" /></dd>
</dl>
<script type="text/javascript">
window.onload = function() {
document.getElementById('block').onclick = function() {
this.onclick = '';
this.value = '{LA_SEND_CONFIRM}';
this.className = this.className.replace('button1','');
document.getElementById('replacement').value = '{LA_BLOCK_CODE}';
}
}
</script>
Bước 2: Mở file includes/acp/acp_words.php, tìm:
$cache->destroy('_word_censors');
Chèn vào SAU đoạn mã vừa tìm được bằng đoạn mã bên dưới:
$cache->purge();
Bước 3: Mở file includes/cache.php, tìm:
/**
* Obtain list of naughty words and build preg style replacement arrays for use by the
* calling script
*/
Chèn vào TRƯỚC đoạn mã vừa tìm được bằng đoạn mã bên dưới:
/**
* Obtain list of blacklisted sites and build preg style for use by the calling script
*/
function obtain_site_blacklist()
{
global $db;

if (($all_site_blacklist = $this->get('_site_blacklist')) === false)
{
$sql = 'SELECT word, replacement
FROM ' . WORDS_TABLE ."
WHERE replacement = 'blacklisted_site'";
$result = $db->sql_query($sql);

$site_blacklist = array();
while ($row = $db->sql_fetchrow($result))
{
$site_blacklist[] = '(' . str_replace('\*', '\w*?', preg_quote($row['word'], '/')) . ')';
}
$db->sql_freeresult($result);
$all_site_blacklist = implode('|', $site_blacklist);
$all_site_blacklist = '/' . $all_site_blacklist . '/';

$this->put('_site_blacklist', $all_site_blacklist);
}

return $all_site_blacklist;
}
Bước 4: Mở file posting.php, tìm:
// Store message, sync counters
Chèn vào TRƯỚC đoạn mã vừa tìm được bằng đoạn mã bên dưới:
// Blacklisted sites check
$site_censor_data = $cache->obtain_site_blacklist();
if (sizeof($site_censor_data))
{
preg_match_all($site_censor_data, utf8_normalize_nfc(request_var('message', '', true)), $word);
$remove_duplicate_item = array_unique($word[0]);

$blacklisted_sites = implode(',', $remove_duplicate_item);
if ($blacklisted_sites != '')
{
$error[] = sprintf($user->lang['CANNOT_POST_BLACKLISTED_SITE'], $blacklisted_sites);
}
}
Bước 5: Mở file language/vi/posting.php, tìm:
'CANNOT_POST_ANNOUNCE' => 'Xin lỗi, bạn không thể tạo thông báo.',
Chèn vào SAU đoạn mã vừa tìm được bằng đoạn mã bên dưới:
'CANNOT_POST_BLACKLISTED_SITE' => 'Xin lỗi!, bạn không thể gửi bài viết có chèn %s.',
Bước 6: Mở file language/vi/acp/posting.php, tìm:
'REPLACEMENT' => 'Từ thay thế',
Chèn vào SAU đoạn mã vừa tìm được bằng đoạn mã bên dưới:
'BLOCK_WORD' => 'Chặn',
'BLOCK' => 'Chặn site này',
'BLOCK_CODE' => 'blacklisted_site',
'SEND_CONFIRM' => 'Bấm "Chấp nhận" để chặn site này',
Bước 7: LƯU tất cả các file lại. Sau đó Dọn sạch bộ nhớ đệm nữa là xong!

Cách thêm địa chỉ website vào Danh sách đen.
- Bạn vào theo đường dẫn: Bảng điều khiển của Quản trị viên »» Gửi bài viết »» Kiểm duyệt từ »» bấm chọn Thêm từ kiểm duyệt mới.
- Lúc này bạn sẽ thấy chỗ kiểm duyệt từ đã có thêm phần Chặn website.
Bạn hãy nhập domain website cần chặn vào ô Từ kiểm duyệt (1), sau đó bấm Chặn site này (2), cuối cùng bấm Chấp nhận (3) để hoàn thành.
Ví dụ minh họa: Nếu tôi muốn chặn website dophuquy.com, tôi sẽ thực hiện theo thứ tự như các bước minh họa bên dưới.
Hướng dẫn chặn website spam trên phpBB3
MOD chặn website spam phpBB3
Và đây là kết quả: Hệ thống sẽ báo lỗi "Không thể gửi bài viết" bởi vì tôi đã chèn website dophuquy.com.
MOD Advanced Block Blacklisted Sites
____________________________
Lưu ý:
- Bài viết này DoPhuQuy dịch và trình bày theo MOD Advanced Block Blacklisted Sites (1.0.1) của tác giả Dugi (Homepage: http://www.IMGit.org)
- Hoan nghênh các bạn ghi rõ nguồn www.dophuquy.com khi sử dụng lại bài viết.
  1. Anonymous Đây là MOD nâng cao trong chức năng kiểm duyệt từ mà phpBB đã có sẵn. Rất hữu ích cho các diễn đàn hay bị spam link!
  2. Anonymous Sao code 2 bước cuối em bấm Ctrl+F để tìm mà không thấy nhỉ?
  3. Voi Con @2: Bạn chỉ cần tìm CANNOT_POST_ANNOUNCE để xác định dòng code trong file đó. Tương tự như vậy, bạn cùng tìm REPLACEMENT cho bước kế cuối.
  4. Mạnh Nguyễn Mình đã dùng MOD này cho diễn đàn. Phải nói là quá tuyệt!
    cảm ơn bạn Q đã hướng dẫn rất chi tiết.
  5. Anonymous chặn riêng 1 từ nào đó mà không phải domain được không adm?
  6. Đỗ Phú Quý @5: Được bạn à! :)