Úgy érzem eleget teszteltem már a védelmi szkriptemet, így már elérkezettnek látom az időt, hogy itt is közzétegyem.
Előrebocsájtom, hogy használatáért semmilyen felelősséget nem vállalok, és programozó sem vagyok, de nagyon igyekeztem.
Egy kicsit azért visszacsévélem az időt, hogy a credit ne maradjon ki. Az egész bűvészkedésnek az alapját a CrawlerController script adta, amely a referrer spammerek ellen védelmezi az oldalunkat. Sajnos, nem voltam eléggé ügyes, hogy működésre bírjam, de nagyon sok részt használtam belőle így aztán jár neki az elismerés. Nem hagyhatom ki kow-t sem, aki birka türelemmel válaszolgatott a sokszor értelmetlen kérdéseimre.
Akkor most veszek ismét egy éles visszakanyart, és folytatom ott, ahol abbahagytam, de először egy bajuszhalmaz, amolyan felsorolás a funkciókról:
- robot validálás
- user agent kitiltási lehetőség
- IP cím kitiltási lehetőség
- URL string szűrés az adatbázis rosszindulatú manipulálása ellen
- string logfájlnak köszönhetően ellenőrzött és testreszabhatóan agresszív IP bannolás
A telepítés rendkívül egyszerű, a csomag letöltését, kicsomagolását követően egy tetszőleges könyvtárba kell feltölteni a fájlokat majd a könyvtár security.php fájlját minden védelem alá helyezendő oldalba behívni a legelső sorban.
<?php require “/ide/jön/a/path/tetszolegeskonyvtarnev/security.php”; ?>
És akkor lássuk jelen esetben most mi is lapul a security.php fájlban
<?php
$ua = $_SERVER[‘HTTP_USER_AGENT’];
$webadress = $_SERVER[‘REQUEST_URI’];
$ip = $_SERVER[‘REMOTE_ADDR’];
$target = file(dirname(__FILE__).”/ip-logfile.txt”);
$sqltarget = file(dirname(__FILE__).”/sql-injection.txt”);
$ualist = file(dirname(__FILE__).”/banned-ua.txt”);
$loc = dirname(__FILE__);
//Indul a szkript
//ha a látogató azt mondja magáról, hogy robot
if(strstr($ua, ‘msnbot’) || stristr($ua, ‘Googlebot’) || stristr($ua, ‘Yahoo! Slurp’)){
//lefut a robot validálása
require “$loc/security-proxy-checker.php”;
}
else{
//bannolt user-agentek
foreach($ualist as $item){
$item = trim($item);
if(stristr($ua, $item)){
require “$loc/message.php”;
exit;}}
//IP ellenorzés követketik
foreach($target as $item){
$item = trim($item);
if(stristr($ip, $item)){
require “$loc/message.php”;
exit;
}}
//sql támadásának ellenorzése
foreach($sqltarget as $sqlitem){
$sqlitem = trim($sqlitem);
if(stristr($webadress, $sqlitem)){
require “$loc/index.php”;
exit;}}}
?>
Az sql injekciós támadások azonosításához ezen az oldalon megtalálható remek kis táblázatot használtam, valamint kiegészítettem ezekkel a szavakkal:
- truncate
- union
- drop
- delete
- get
- post
Szerintem az a legszerencsésebb, ha beszerelsz egy olyan statot, amely logolja a lekért url-eket és ennek megfelelően bővíted az sql-injection.txt-ben található tartalmat.
Ahogy, az az iménti kódból kiderült lesznek logfájljaink és lesz egy üzenet valamint egy index.php fájl is amely a kettővel korábbi posztom index fájljának felel meg, de egy kicsit okosabb lett azóta. Ezek a fájlok fognak a rosszalkodók ellen fellépni.
Az index.php tartalma a következő:
<?php
Hívhatnánk akár adatgyűjtő.php-nek is funkciója alapján. Elteszi biztos helyre a játékos kedvű próbálkozó IP címét, valamint egy ellenőrző logfájlba (requested-string.txt) bepakolja a lekért URL-t, a hozzátartozó IP-t és a lekérést időpontját. Ezt a fájlt mindenképpen érdemes időnként felülvizsgálni, hogy a véletlenül (?) bannolt népnek ismét hozzáférést biztosíthassunk.
A message.php-mat a csomagban megtalálhatod, ez már egy nagyon Úriemberhez méltó tartalommal rendelkezik. A legelső verzióban több volt a vulgáris szó, mint a felkiáltójel.
Jó ötlet lehet esetleg az ördögűző, vagy valamely egyéb paráztató film félelmetes jeleneténél készült printscreen megjelenítése…
Mit kellene még leírnom?
Ja igen, letölteni itt lehet
Szerintem semmi nem maradt ki, szóval védelemre fel!
További kellemes napot!