Alternatif Blokir Spam


Status
Not open for further replies.

DraCoola

Expert 1.0
dear mas Tuan,

akibat terlalu lama mengamati log modsec, iseng saya bikin php script sederhana untuk menangkal spam.
kebetulan karena log modsec saya bertumpukan log 403 access denied yang berasal dari spammer dengan target joomla.
tapi tidak tertutup kemungkinan script ini digunakan untuk cms lain.

bagi pengguna joomla yg masih menyukai asesoris guestbook akan pasti/mutlak dihajar spam dan spambot sbb :

--------------------
>> ht**p://disporabudpar.jambikota.go.id/index.php/informasi-lain/buku-tamu

>> h**p://dr*c*ola.com/image/dwh/csf-jambi.jpg
--------------------

module/component joomla yg sama (phocaguestbook, K2, dll dst dsb) selain digunakan untuk guestbook juga kadang digunakan untuk submit testimonials.
dan sialnya code captcha bawaan modul/component tersebut sama sekali tidak berfungsi.
entah karena memang coding captcha yang buruk atau memang spambot racikan terkini sudah berhasil skip form captcha.

langsung script nya aja dulu :

PHP:
<?php
$anune = file_get_contents("php://input");
if ((stristr("$anune","http://")) or (stristr("$anune","href")) or (stristr("$anune","casino")) or (stristr("$anune","blackjack")) or (stristr("$anune","poker")) or (stristr("$anune","earn")) or (stristr("$anune","business")) or (stristr("$anune","capital")) or (stristr("$anune","cheap")) or (stristr("$anune","price")) or (stristr("$anune","pleasure")) or (stristr("$anune","loan")) or (stristr("$anune","gambling")) or (stristr("$anune","href")) or (stristr("$anune","*****")) or (stristr("$anune","sex")) or (stristr("$anune","lolita")) or (stristr("$anune","woman")) or (stristr("$anune","viagra")) or (stristr("$anune","******")) or (stristr("$anune","mast")) or (stristr("$anune","diet")) or (stristr("$anune","pills")) or (stristr("$anune","dating")) or (stristr("$anune","*****")) or (stristr("$anune","lesb")) or (stristr("$anune","movie")) or (stristr("$anune","gall")) or (stristr("$anune","img")) or (stristr("$anune","anal")) or (stristr("$anune","horn")) or (stristr("$anune","sper")) or (stristr("$anune","****")) or (stristr("$anune","anus")) or (stristr("$anune","clit")) or (stristr("$anune","ash")) or (stristr("$anune","dick")) or (stristr("$anune","ass")) or (stristr("$anune","fuk")) or (stristr("$anune","maso")) or (stristr("$anune","gay")) or (stristr("$anune","pee")) or (stristr("$anune","phu")) or (stristr("$anune","shit")) or (stristr("$anune","slut")) or (stristr("$anune","bitc")) or (stristr("$anune","biatc")) or (stristr("$anune","whore")) or (stristr("$anune","xxx")) or (stristr("$anune","xrate")) or (stristr("$anune","dild")) or (stristr("$anune","url")) or (stristr("$anune","teen")) or (stristr("$anune","suck")) or (stristr("$anune","lick")) or (stristr("$anune","bast")) or (stristr("$anune","mature")) or (stristr("$anune","free")) or (stristr("$anune","discount")) or (stristr("$anune","breast")) or (stristr("$anune","toy")) or (stristr("$anune","orgas")) or (stristr("$anune","font")) or (stristr("$anune","size")) or (stristr("$anune","car")) or (stristr("$anune","core")) or (stristr("$anune","russian")) or (stristr("$anune","nude")) or (stristr("$anune","undreage")) or (stristr("$anune","cialis")) or (stristr("$anune","tramadol")) or (stristr("$anune","pharmacy")) or (stristr("$anune","drugstore")) or (stristr("$anune","rolex")) or (stristr("$anune","insurance")) or (stristr("$anune","car")) or (stristr("$anune","card")) or (stristr("$anune","gucci")) or (stristr("$anune","she")) or (stristr("$anune","cock")) or (stristr("$anune","video")) or (stristr("$anune","threesome")) or (stristr("$anune","*******")) or (stristr("$anune","guy")) or (stristr("$anune","porn"))) {
    $bajingan = $_SERVER['REMOTE_ADDR'];
    $file = ".htaccess";
    @$fh = fopen($file, 'a') or die("can't open file");
    $modar = "deny from ".$bajingan."\r\n";
    fwrite($fh, $modar);
    fclose($fh);
    header("location:http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/iso/Fedora-14-x86_64-DVD.iso");
    exit; }
else { include_once "index3.php"; }
?>



modsec dengan gotroot rules (gratis) dan apalagi atomic rules (berbayar) yang dikombinasikan dengan csf firewall memang cukup bisa menangkal.
sejak menangkal bad words hingga sekaligus blokir IP secara otomatis oleh csf dalam 5 kali (default csf) pengulangan aktivitas posting spam.

csf-modsec.jpg




namun sayangnya limitasi 100 denied IP pada csf.deny akan membuat blokir IP spammer lepas kembali nantinya.
sedangkan menambah limit lewat dari 100 buah IP tidak disarankan karena akan membebani booting dan performa network server.

csf-deny-ip.jpg


maka alternatif yg terlintas malam ini adalah blokir ip spammer secara individu (hanya korban spam saja) via .htaccess.
efektif untuk membunuh secara permanen akses spammer (bot/human) karena tidak ada rolling 100 buah IP seperti csf.
efektif karena membantu modsec supaya bekerja lebih rileks.
efektif meredam pemborosan cpu dan ram server akibat tingginya akses spammer.
terutama efektif untuk membantu korban spam dari bencana kehabisan bandwidth (untuk limited-bandwidth hosting).

*bersambung....
 
ternyata tidak boleh edit post lewat dari 15 menit disini.... :(
nah, sekarang mengenai 1-2-3 nya penggunaan.


  1. alokasikan website/account korban spam dengan mengamati modsec log.
    cara termudah adalah dengan menggunakan ConfigServer ModSec Control sbb :

    csf-korban.jpg


    pada log tampak penjahit spam sedang sibuk menghajar [/index.php?option=com_phocaguestbook&view=phocaguestbook&id=1&Itemid=56&limitstart=19220


    atau bisa juga dengan mempelajari access-log website yang memiliki usage bandwidth tinggi yg tidak wajar sbb :
    Code:
    cat /home/username/access-logs/namadomainnya.com | grep POST



  2. karena seluruh kegiatan joomla ternyata selalu melalui index.php, maka bisa kita replace isi index.php dengan script jebakan betmen.
    langkah awal adalah dengan copy terlebih dahulu index.php milik joomla menjadi index3.php
    dan dilanjutkan dengan replace isi index.php dengan script di atas.

    Code:
    cp index.php index3.php; chown username.username index*; echo > index.php; nano index.php


  3. jika htaccess.txt milik joomla belum di rename menjadi .htaccess, bisa dilakukan segera.
    atau bisa saja langsung create file .htaccess baru.


  4. done.
    nikmati hasilnya via tail -f .htaccess
    jika spam sangat deras, deny IP akan bertambah dengan cepat pula

*bersambung....
 
deskripsi fungsi script :

PHP:
$anune = file_get_contents("php://input");
menangkap string/konten POST via HTTP tanpa kita harus mengetahui terlebih dahulu nama variable nya (karena bukan hasil POST via form).


PHP:
(stristr("$anune","http://"))
bertugas sebagai filter bad words untuk mencari kecocokan dengan keyword yg sudah kita berikan.
keyword bisa ditambah-kurangi semau mas Tuan, sesuaikan dengan kebutuhan dan kenyamanan.


PHP:
$bajingan = $_SERVER['REMOTE_ADDR'];
$file = ".htaccess";
@$fh = fopen($file, 'a') or die("can't open file");
$modar = "deny from ".$bajingan."\r\n";
fwrite($fh, $modar);
fclose($fh);
untuk buka, tulis, dan tutup file .htaccess
file .htaccess akan terisi secara listing dengan deny alamat IP spammer yg berhasil terjerat asmara.


PHP:
header("location:http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/iso/Fedora-14-x86_64-DVD.iso");
iseng saja.
siapa tahu spammer adalah bukan spambot alias manusia murni yang hobi download file iso Fedora.
bisa dihilangkan bila mas Tuan kurang berkenan.

PHP:
include_once "index3.php";
jika posting pada form guestbook dianggap valid/lolos dari filter, akan diarahkan langsung menuju index3.php (replika index.php default milik joomla).
dan juga sebagai bypass jika visitor joomla hanya sekedar visitor saja (tanpa melakukan posting pada form manapun).
 
kelupaan :

sebelum pemasangan script, pada baris terakhir file .htaccess jangan lupa diberikan code berikut :

Code:
<Files 403.shtml>
order allow,deny
allow from all
</Files>

kemudian nama file index3.php adalah optional.
mas Tuan bisa memberikan nama lain apapun sesuai selera.

memiliki website yg indah dan selalu bersih dari spam adalah dambaan setiap umat manusia yang ada di seluruh dunia.
pada akhirnya semoga kegiatan ini bisa lumayan mengurangi beban mysql, cpu, ram, dan pemborosan jatah bandwidth, amin.
 
Apa tidak sebaiknya melalui mekanisme 'approve' yang artinya yang tampil di guestbook hanya yang lolos 'screening' saja?.
 
Apa tidak sebaiknya melalui mekanisme 'approve' yang artinya yang tampil di guestbook hanya yang lolos 'screening' saja?.
mohon maaf bang must saya agak bingung...
mungkin maksud 'approved setelah melalui screening' pertanyaan bang must berarti diterapkan langsung pada component guestbook nya?

jika benar seperti itu, maka saya bikin ginian ini dengan tujuan untuk diaplikasikan ke berbagai macam script guestbook (joomla), tanpa perlu mempelajari terlebih dahulu berbagai macam script guestbook yang beredar.
jadi berupa general screening melalui index.php yang bila telah lolos screening akan diumpankan langsung ke index3.php.
dari index3.php itulah kemudian bisa lanjut menjadi query insert ke mysql.

jadi guna screening pada index.php joomla supaya bisa turut berlaku pula untuk keseluruhan form yang ada pada website.
karena saya juga pernah menemukan spambot yang terus-menerus memberikan HTTP POST berisi bad words pada form search joomla.
serbuan pada form search memang tidak menjadi hasil entry apapun pada website.
tapi menjadi penyedot bandwidth dan resource server yg potensial.
spambot hari gini memang sangat urakan sekali.
 
Saya tidak pernah pakai joomla untuk website. Paling-paling hanya untuk testing apakai Kloxo saya berjalan baik.

Kalau di wordpress secara default comment baru bisa ditampilkan jika mendapat 'approve' dari si pemilik website. Ada satu website saya yang sehari paling tidak ada 100 spam yang masuk via comment. Biasanya seminggu 2x saya lihat comment yang masuk. Jika spam maka langsung saya delete tapi jika tidak maka akan saya 'approve' sehingga kemudian akan tampil.
 
tengkiu penjelasannya, bang must.
kebetulan pada post pertama saya fokuskan ke joomla, yang meskipun script sangat oprekable bisa dipakai untuk cms lain.
misal kalo pada wordpress serangan spam biasanya menghentak² di /wp-comments-post.php

jadi sebenarnya yang saya sampaikan hanya ide dasarnya saja.
ide mengenai pemberlakuan screening sangat awal sebelum penjahit spam berhasil memasukkan sesuatu ke dalam database/mysql.
karena yang seperti kita ketahui bersama bahwa gilingan mysql bisa menjadi cukup tinggi bila dihujani spambot.
berdampak angka load cpu yg lebih tinggi jika dibandingkan bila tanpa hujan spam.
dan yang terpenting adalah untuk menghalangi spammer yg sama (alamat IP spammer yg sama) mengulangi lagi perbuatan centilnya.

saya, sebagai mahluk hoster, juga berusaha 'meng-antispam-in' pengguna joomla (dan cms lain) yg terbit dari kalangan 'cuek', 'lupa', dan 'newbie'
yakni jenis yg lupa membiarkan form tanpa captcha dan tanpa proses approval.
dan atau jenis pengguna yang cuek ketika memandangi ratusan ribu entry guestbook nya yang penuh tablet viagra.
saya pernah menemukan account hosting dengan quota 200 Mb menjadi jebol hingga 4.9 GB.
hal tersebut terjadi berkat database super jumbo berisi comment spam dengan owner mysql.mysql yg tidak turut dihitung sebagai milik user oleh system quota linux.

yang paling memilukan untuk hosting provider adalah ketika pengguna newbie yang menghadap dengan kondisi mengamuk karena beliau mendadak mendapati halaman "Bandwidth Limit Excedeed" pada tanggal 4.
sedangkan reset bandwidth adalah per tanggal 1 setiap awal bulan (oh my God).
 
Metode seperti punya anda pernah saya pakai ketika jaman masih asp di cms rancangan sendiri. Capeknya sama dengan metode wordpress ('approve' model). Mungkin jalan terbaik adalah kombinasi keduanya.
 
he em benar sekali bang must, paling sip bila keduanya diterapkan.
mungkin ketiganya, bila ditambahkan dengan filter spam dari modsec rules.

dan seandainya pengguna cms mayoritas (seluruhnya) setangkas dan seperduli bang must terhadap website masing², maka bahkan script 'mengantispamin' ini tidak sampai terlintas di lembar kehidupan saya.
dan sukurlah saat ini saya hanya cukup memikirkan script kecil general screening untuk ditempel pada cms yg sudah ada.
hanya berusaha membantu otomatisasi blokir IP penjahit spam saja.
jadi tidak sampai turut membuat cms baru.
lah wong bahkan saya sendiri seumur-umur tidak pernah punya/pakai website joomla based :o
 
Status
Not open for further replies.
Back
Top