مبارزه با اسپم

سه‌شنبه ۱۷ بهمن ۱۳۹۶
۳ دقیقه مطالعه

ظهور دیدگاه‌های تبلیغاتی و کامنت‌های بیهوده و اسپم پای مطالب شتری است که مقابل در خانه‌ی هر وبلاگ‌صاحابی می‌نشیند. دیر و زود دارد ولی سوخت و سوز ندارد. در ادامه ساخت یک کامنت‌دونی استاتیک وارد فاز مبارزه با اسپم شده‌ام.

مشکل چیست؟

طی هفته‌های گذشته با افزایش بازدیدها از وبسایت به تدریج کامنت‌های اسپم یکی یکی پای مطالب پر مراجعه ظاهر می‌شوند. مثلا یکی پای مقاله نصب گواهینامه SSL تبلیغ آموزشگاه رانندگی می‌گذارد و دیگری هم زیر مطلب آموزش حق دسترسی در لینوکس ویاگرا تبلیغ می‌کند. طبیعی است که کامنت‌دونی استاتیک در مقابل اسپم بی‌دفاع است و من باید راه‌حلی دست و پا کنم.

من این موضوع را به فال نیک می‌گیرم و از این فرصت برای یادگرفتن تکنیک‌های تشخیص و مقابله با اسپم استفاده می‌کنم.

چند نوع اسپم می‌گیرم؟

من دو گروه پیام ناخواسته دریافت می‌کنم:

  1. پیام تبلیغاتی انگلیسی
  2. پیام تبلیغاتی فارسی

پیامهای دیگری هم هست ولی از اهمیت کمتری برخوردار هستند. پیامهای تبلیغاتی هم یا برای تبلیغ خرید کالا هستند یا برای بالابردن بازدید از یک وبسایت به جهت گسترش بدافزار یا کسب درآمد از تبلیغات یا اخیرا دزدی توان‌پردازشی کامپیوتر بازدید کننده جهت ماین کردن کریپتوکارنسی‌هایی مثل بیت‌کوین.

هدف چیست؟

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

راه‌حل چیست؟

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

دیگران چه می‌کنند؟

برای کشف اسپم روش‌های مختلفی هست. روشهای حرفه‌ای مانند:

  1. استفاده از یک سرویس آنلاین مثل Akismet که رایگان است.
  2. جمع‌آوری یک بانک‌داده از اسپم‌ها و استفاده از یادگیری ماشین برای تشخیص.
  3. چک کردن ایمیل و URL و IP و پیام با یک بلک‌لیست.

یا روشهای غیردراماتیک‌تر اما بسیار موثری مانند اینها:

  1. غیرفعالسازی کامنت‌دونی بعد از سپری شدن مدت زمان مشخص، مثلا یک ماه.
  2. محدود کردن کامنت‌ها به یک زبان مشخص.
  3. محدود کردن طول پیام.
  4. ایجاد سیستم امتیازدهی بر اساس تعداد لینک‌ها و کاراکترها و سایر پارامترهای ممکن.

اولین درس: راه حل قطعی وجود ندارد

اولین نکته‌ای که پس از تست روش‌های مختلف یاد گرفتم اینست که تشخیص اسپم پاسخ قطعی ندارد و تقریبی است. همه روش‌های موجود فقط در صدد کاهش خطا هستند و قادر به از بین بردن آن نیستند. حتی یک غول فناوری مانند گوگل هم هر از چندی ایمیلی را اسپم تشخیص می‌دهد که سالم است و برعکس. (برای من هر از گاهی پیش می‌آید!) بنابراین در نهایت از دست رفتن تعدای پیام خوب و یا قصر در رفتن تعدادی اسپم غیرقابل اجتناب است. هدف من هم افزایش قسمت خودکار ماجرا و کاهش این موارد است.

راه‌حل من

از بین موارد بالا من تصمیم گرفتم پیامهای غیرفارسی را منتشر نکنم. با اینکار از شر کلی تبلیغ ویاگرا خلاص شدم! هرچند برخی از پیامهای فارسی که متن انگلیسی زیادی داشتند هم به دام افتادند. البته مهم نبود چرا که جای پیامی که یک StackTrace درون خودش دارد در گیت‌هاب است و نه در کامنت‌دونی!

برای اینکار اسکریپت بیلد را تغییر دادم و از یک پکیج پایتون بنام langdetect استفاده کردم که با دقت خوبی زبان هر متنی را تشخیص می‌دهد.

با تبلیغات فارسی چه کنم؟

من در حال جمع‌آوری دیتابیسی از تبلیغات فارسی هستم. هدفم Train کردن یک مدل یادگیری ماشین برای تشخیص تبلیغات فارسی است. البته از Akismet هم استفاده می‌کنم. وقتی تعداد قابل توجهی پیام تبلیغاتی فارسی داشته باشم، می‌توانم الگوهای تکراری را در آنها پیدا کنم و در تشخیص تبلیغات استفاده کنم. نمی‌دانم در این زمینه کاری انجام شده است یا خیر اما من نتیجه کارم را اول در وبلاگ خودم و سپس به صورت اوپن‌سورس منتشر خواهم کرد.

اگر شما هم تجربه‌ای در مبارزه با اسپم و بویژه تبلیغات فارسی دارید حتما بنویسید یا پیامی بگذارید. اگر هم بانک‌داده‌ای از تبلیغات یا اسپم فارسی سراغ دارید خبر بدهید.

سورس