تصویر محمدعلی اکبری

یکی از بلاهایی که ممکن است به جان یک وبسایت مبتنی بر CMS های معروف مانند دروپال، وردپرس یا جوملا بی‌افتد، حمله روبات‌ها و ارسال هرزنامه‌ها روی سایت از طریق فرم‌های تماس و درج دیدگاه است.

برای مبارزه با این هرزنامه ها راه های زیادی از جمله نصب ماژول‌های کپچا (Captcha) یا آنتی اسپم‌ها مانند AntiSpam یا Mollom و غیره است.

از نظر من کپچا باعث آزار کاربر سایت میشود، همچنین ماژول های آنتی اسپم نیز افراط و تفریط دارند. گاهی انسان را بجای ربات شناسایی کرده و گاهی ربات را بجای انسان.

اما برای رفع هرزنامه ها به صورت دستی نیز راه هایی وجود دارد، از جمله درست ست کردن سطوح دسترسی و مونیتورینگ پایگاه داده، به عنوان مثال کوئری زیر تعداد ارسال های یک آدرس IP خاص روی فرم درج دیدگاه ها را برمیگرداند:

SELECT hostname, count(*) as count, SUM(status) as approved FROM `comment`
WHERE uid = 0
GROUP BY hostname
ORDER BY count DESC

خروجی این کوئری را در نظر بگیرید:

hostname          count approved     
198.100.146.33    35    0
182.236.163.6     27    0
182.91.164.25     27    0
69.197.189.6      23    0
46.161.41.34      17    0
46.105.124.95     12    0
198.27.64.125     10    0
2.177.100.31      6     6
212.80.21.150     6     6
88.198.97.122     5     0
5.250.7.74        4     4
108.163.192.77    4     0
217.218.81.50     4     4
2.191.238.181     3     3
91.236.75.108     3     0
85.15.45.148      3     3
5.9.254.180       2     2
80.82.16.118      2     0
31.59.136.188     2     2
94.183.244.27     2     2
192.169.68.108    2     0
94.20.20.135      2     0
112.101.64.92     2     0
192.151.146.202   2     0
151.246.141.160   2     2
112.111.30.196    2     0
188.64.170.221    2     0
31.184.238.184    2     0
85.185.28.131     2     2
199.15.234.213    2     0

می تواند حدس زد IP هایی تعداد ارسال آنها زیاد و نا متعارف است، اسپم می باشند. برای اطمینان اختلاف بین تعداد ارسال و تعداد دیدگاه های تایید شده را نیز می توان در نظر گرفت.

بعد از این مرحله تمامی IP های مشکوک را بلاک میکنیم. برای این کار کافی است آنها را در جدول blocked_ips درج کنیم.

برای بلاک کردن IPهایی مزاحم کوئری زیر را اجرا کنید:

INSERT INTO blocked_ips( `iid` , `ip` ) (
   SELECT NULL , `hostname`
   FROM `comment`
   WHERE `status` = 0
   GROUP BY `hostname`
)

بعد از اضافه کردن IP های مزاحم به جدول blocked_ips برای حذف رکوردهای ایجاد شده می‌توانید از دستورات زیر با توجه به ساختار دروپال اقدام کنید.

DELETE FROM comment_notify WHERE cid IN (
  SELECT cid FROM `comment`
  WHERE hostname
  IN (
   SELECT ip
   FROM blocked_ips
  )
)

برای حذف فیلدهای مرتبط ابتدا فیدلهایی که به دیدگاه ها مرتبط است را پیدا کنید:

SELECT DISTINCT field_name FROM `field_config_instance` WHERE entity_type = 'comment'

سپس برای هرکدام جداول داده را خالی کنید.

DELETE FROM `field_data_comment_body` WHERE entity_type = 'comment' AND entity_id IN (
  SELECT cid FROM `comment`
  WHERE hostname
  IN (
   SELECT ip
   FROM blocked_ips
  )
)

همچنین جداول مربوط به نسخه بندی داده ها را خالی کنید.

DELETE FROM `field_revision_comment_body` WHERE entity_type = 'comment' AND entity_id IN (
  SELECT cid FROM `comment`
  WHERE hostname
  IN (
   SELECT ip
   FROM blocked_ips
  )
)

در نهایت جدول مربوط به دیدگاه ها را نیز خالی کنید.

DELETE FROM `comment` WHERE hostname IN (
  SELECT ip
  FROM blocked_ips
)

 

افزودن نظر جدید