Jump to content
xss

[PHP]Securizarea $_GET si $_POST

Recommended Posts

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 0
if($_SESSION['ban'] == NULL )
{
$_SESSION['ban'] = 0;
}

//Stim ca valorile $_POST sunt array asa ca il putem aprcurge cu foreach
foreach($_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 foreach
foreach($_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 5
if($_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
}
?>

Link to comment
Share on other sites

ideea este buna doar ca idee

in 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

Link to comment
Share on other sites

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 blocat

in 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

Link to comment
Share on other sites

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 ..."

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...