xss Posted April 30, 2008 Report Posted April 30, 2008 Am lasat comentarii sa se itnealeaga ce vreau ... ca acest cod php sa mearga trebuie sa aveti un tabel `banlist` si un camp `ip` VARCHAR(100) preferabil..Scrieti codul intrun php separat si il includeti in pagina care vreti sa o "protejati"<?php//Luam ip$ip = getenv('REMOTE_ADDR');$ip = mysql_real_escape_string($ip);//Verificam daca e banat cumva$r_vban = mysql_query("SELECT * FROM `banlist` WHERE `ip` = '".$ip."'");if(mysql_num_rows($r_vban) > 0 ) { die( 'Se pare ca esti banat pe acest site' );//Daca este banat ii interurpem functionalitatea siteului }//Cuvinte interzise$cuvinte_interzise = array("union","del","insert","update","drop","select","$", "script");//Daca sesiunea ban nu a fost inca initializata o initializam cu 0if($_SESSION['ban'] == NULL ) { $_SESSION['ban'] = 0; }//Stim ca valorile $_POST sunt array asa ca il putem aprcurge cu foreachforeach($_POST as $value){ $value = strtolower($value);//Valorile postate le facem in caractere mici foreach($cuvinte_interzise as $word)//acuma parcurgem cuvintele interzise { if(substr_count($value, $word) > 0)//Daca gaseste in array'ul cu cuvinte interzise o valoare postata { $_SESSION['ban']++;//Sesiunea ban este marita cu o unitate die("Atentionare securitate!schimbati valorile postate si reincercati -> $ip, nu uita la 5 atentionari se va primii ban ip");//Si intrerupem scriptul si afisam un mesaj de atentionare } }}//Stim ca valorile $_GET sunt array asa ca il putem aprcurge cu foreachforeach($_GET as $value){ $value = strtolower($value);//Valorile postate le facem in caractere mici foreach($cuvinte_interzise as $word)//acuma parcurgem cuvintele interzise { if(substr_count($value, $word) > 0)//Daca gaseste in array'ul cu cuvinte interzise o valoare postata { $_SESSION['ban']++;//Sesiunea ban este marita cu o unitate die("Atentionare securitate!schimbati valorile postate si reincercati -> $ip, nu uita la 5 atentionari se va primii ban ip");//Si intrerupem scriptul si afisam un mesaj de atentionare } }}//Daca seiunea ban este mai mare ca 5if($_SESSION['ban'] > 5 ) { $sql_ch = "SELECT * FROM `banlist` WHERE `ip` = '".$ip."'";//Verificam daca userul este deja banat $res_ch = mysql_query($sql_ch); if (mysql_num_rows($res_ch) == 0 )//Daca nu este banat { mysql_query("INSERT INTO `banlist` (`ip`) VALUES ('".$ip."')") or die(mysql_error());//Il banam } unset($_SESSION['ban']);//Si distrugem sesiunea }?> Quote
moubik Posted April 30, 2008 Report Posted April 30, 2008 ideea este buna doar ca ideein practica este foarte inutila.exemplu: ai acel script care protejeaza acest forum.tu cand ai fi incercat sa postezi codul scriptului, scriptul tau de securizare ar fi identificat exact cuvintele "rele" si te-ar fi banat.sa va intre bine in cap:NU EXISTA MASURA UNIVERSALA DE PROTECTIE/SECURIZARE Quote
xss Posted April 30, 2008 Author Report Posted April 30, 2008 nu ma refeream la un forum..ma refeream la un site personal unde nu o sa se posteze acele cuvinte relela siteul meu personal de exemplu daca imi da index.php?op="; mysql_query("DROP TABLE `x`"); $sql .= " Quote
moubik Posted April 30, 2008 Report Posted April 30, 2008 la site-ul tau personal, de acord. dar la un moment dat o sa iti blocheze requesturi fara sa stii de ce. exemple:"i dropped out of college" - invalid si blocat"join our marijuana union" - invalid si blocat"' UNION ALL SELECT PASSWORD FROM USERS /*" - valid si nu e blocatin acelasi timp in exemplul tau:index.php?op="; mysql_query("DROP TABLE `x`"); $sql .= "singura chestie identificata este $repet:sa va intre bine in cap:NU EXISTA MASURA UNIVERSALA DE PROTECTIE/SECURIZARE Quote
xss Posted April 30, 2008 Author Report Posted April 30, 2008 nu exista..dar exista si unele mici protectii ca sa apare siteul de "incepatori"...ca daca chiar e cineva sa-ti strice siteul ti'l sterge de pe ftpeu ..brute la parola ..si nu cred ca o sa se transmita prin post sau get fraze "Union of all the romanian people" sau "I selected ..." Quote
zamolx3 Posted April 30, 2008 Report Posted April 30, 2008 si nu cred ca o sa se transmita prin post sau get fraze "Union of all the romanian people" sau "I selected ..."Printre cuvintele tale "interzise" apare si "del". Pot sa ma gandesc la cateva situatii in care apare cuvantul "del". De exemplu: "Apasa ctrl+alt+del!8)". Oricum, sa te uiti dupa niste cuvinte cheie nu este o solutie valabila: este foarte usor sa scapi unele cazuri particulare si poti sa cauzezi probleme pentru utilizatorii tai.De curand am gasit o aplicatie PHP (cat de cat populara) si tipul ala folosea o "protectie" similara la a ta. Numai ca el nu se uita exact dupa cuvintele alea (adica "insert", "select", ...). El s-a gandit ca pot sa apara in text si folosea ("insert ", "select ", ...). Adica adauga un spatiu dupa cuvint.Ei bine, de chestia asta se poate trece usor cu chestii de genul select/**/*/**/from/**/users. (se folosesc delimitatorii de comentarii din MySQL in loc de spatii.)Aplicatia de care vorbeam este si acum vulnerabila la SQL injection. Quote