Dabar yra 2019 Geg 22 07:36




 Puslapis 11 [ 8 pranešimai(ų) ] 
Autorius Žinutė
 Pranešimo tema: [Pamoka] Puslapio sms sistemų, amxbans ir t.t apsaugos
Žinutės numeris: #1  StandartinėParašytas: 2015 Vas 08 17:02 
Flooderis arba specialistas
Vartotojo avataras

Užsiregistravo: 2012 Lap 08 12:55
Pranešimai: 612
Karma: 28
Pastoviai gaunu prašymų dėl puslapio sistemų spragų tvarkymo, dažniausiai problema sql injectionas, su kuriuo iš duomenų bazių pavogiami ir ištrinami duomenys, retesniais atvėjais problema yra dėl Cross Site Scripting (XSS), šioje pamokoje pabandysiu kuo aiškiau ir paparasčiau pateikti reikalingiausią informaciją šių saugumo spragų tvarkymui step by step.

1. Visų pirma turite išsiaiškinti, ar pas jus puslapyje yra spragų, tiek sql injection tiek XSS spragas galima rasti, be jokios programinės įrangos, bet aš rekomenduoju naudoti programą pavadinimu Acunetix Web Vulnerability Scanner, ja naudotis itin paprasta, suvedi puslapio adresą ir spaudi mygtuką start, programa per tam tikrą laiko tarpą nuskaitys visą jūsų puslapį, ir raudonai pateiks rimčiausias spragas, su visa informacija apie tą spragą, konkrečiai infomaciją apie tą kintamajį/kintamuosius kuris/kurie yra nesaugūs. Torrent linkai parsisiusti programą https://thepiratebay.se/search/Acunetix ... ner/0/99/0
Programos scan lango su spragomis pavyzdys:
Paveikslėlis

2. Jeigu spragos pavadinimas: Cross Site Scripting (XSS)
Naudodamasis šia spraga, įsilaužėlis gali siųsti kenkėjišką kodą naudodamasis javascript formomis, taip jis gali išgauti informaciją apie kitus vartotojus, padaryti keitimus duomenų bazėse ar net išgauti duomenų bazės vartotojo prisijungimo duomenis.
Problemos sprendimas:Sprendimų yra ganėtinai daug, kaip pavydžiui pateiksiu vieną su PHP. Jums reikia filtruoti metacharacters, tai galite padaryti naudodami komandą escapeshellcmd()
Pavyzdys:
  1. $privilegija_POST = $_POST["privilegija"]; // šį kodą keičiam į:
  2. $privilegija = escapeshellcmd($privilegija_POST);

Trumpai apie kitus variantus (Jeigu nesuprantate nieko apie PHP šiuos variantus galite ignoruoti): htmlspecialchars($str, ENT_QUOTES), escapeshellargs(),
su Mysqli:
  1. $privilegija_POST = $mysqli->real_escape_string($privilegija_POST); // bus plačiau prie sql injection

su PDO:
  1. $privilegija_POST->execute(array(':privilegija' => $_SESSION['privilegija']) ); // bus plačiau prie sql injection


3. Jeigu spragos pavadinimas: SQL Injection/Blind SQL Injection
Ši spraga yra dažniausiai pasitaikanti, o ir ja pasinaudoti gali beveik kiekvienas turintis PHP pagrindus, ar nuovokos naudojantis google paieškos sistema. Naudodamasis šia spraga įsilaužėlis gali gauti visą informaciją iš jūsų duomenų bazių, ją redaguoti, ištrinti.
Problemos sprendimas: Variantų taipogi yra daug naudojantis tiek PHP, tiek Mysqli, tiek PDO.
Vienas iš variantų naudojantis įrastu PHP: suradus _POST arba _GET:
  1. $page = $_GET['page'];
  2. $country = $_GET['country'];

Pakeisti į:
  1. $page = mysql_real_escape_string($_GET['page']);
  2. $country = mysql_real_escape_string($_GET['country']);
  3.  

Aišku šis extensionas bus ateityje pašalintas iš PHP, panašiu principu veikia ir komanda
Kiti pavydžiai: panašiai kaip su XSS rekomenduojama naudoti Mysqli arba PDO (PDO eina nuo PHP 5.1 versijos), PHP versija galima pamatysi parašius
Pavyzdukas su PDO:
  1. $stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
  2.  
  3. $stmt->execute(array('name' => $name));
  4.  
  5. foreach ($stmt as $row) {
  6.     // do something with $row
  7. }

Su Mysqli:
  1. $stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
  2. $stmt->bind_param('s', $name);
  3.  
  4. $stmt->execute();
  5.  
  6. $result = $stmt->get_result();
  7. while ($row = $result->fetch_assoc()) {
  8. }

---------------------------------------------------------------------------------
Pavyzdys su amxbans 6.xx Blind sql injection ir kaip tai sutvarkyti:
---------------------------------------------------------------------------------
į ban_details.php po session_start(); eilutės įrašome:
  1. $bid = mysql_real_escape_string($_GET['bid']);
  2. $bhid = mysql_real_escape_string($_GET['bhid']);


Noredami užblokuoti, kad įsilaužėlis negalėtų skanuoti jūsų web, galite blokotuoti failą robot.txt per .htaccess arba index faile įdėti kodą iš šios temos: viewtopic.php?p=23035#p23035

Kol kas tiek, jeigu kažką domins papildysiu plačiau. ( Būtų naudinga stickint postą)


Prikabinti failai:
pavyzdys.png
pavyzdys.png [ 69.56 KiB | Peržiūrėta 4178 kartus(ų) ]


Paskutinį kartą redagavo V1LKAS 2015 Vas 08 23:18. Iš viso redaguota 1 kartą.
Atsijungęs
 Aprašymas  
 
 Pranešimo tema: Re: [Pamoka] Puslapio sms sistemų, amxbans ir t.t apsaugos
Žinutės numeris: #2  StandartinėParašytas: 2015 Vas 08 22:43 
Moderatorius
Vartotojo avataras

Užsiregistravo: 2012 Rgp 03 01:12
Pranešimai: 4482
Karma: 126

Miestas: Vilnius
prisek programa jai gali



_________________
Paveikslėlis
Paveikslėlis
Paveikslėlis
Atsijungęs
 Aprašymas  
 
 Pranešimo tema: Re: [Pamoka] Puslapio sms sistemų, amxbans ir t.t apsaugos
Žinutės numeris: #3  StandartinėParašytas: 2015 Vas 08 22:54 
Viršininkas
Vartotojo avataras

Užsiregistravo: 2011 Kov 12 22:19
Pranešimai: 2067
Karma: 94

Miestas: Linksmakalnis
MySQL jau pamiršk, jei mokai, mokink ant to kas veikia ir veiks ateityje, tai mysqli ir pdo.

Beje, užtenka pilnai ir: $kazkas = addslashes(htmlentities($_GET['kazkas']));
Esmė ta, kad net PDO nesugeba susidoroti su HTMLENTITIES, tad jis yra būtinas, kad būtų paverstas į kodą, ne simbolius.



_________________
WWW.REZ.LT - Geri, bet ne geriausi serveriai Lietuvoje
CS/CS:S/CS:GO/MC/Killing Floor Serverių monitoriai su žaidėjų atvaizdavimu
50% paramos atgavimas, perkant VPS Dedikuoti.lt
Atsijungęs
 Aprašymas  
 
 Pranešimo tema: Re: [Pamoka] Puslapio sms sistemų, amxbans ir t.t apsaugos
Žinutės numeris: #4  StandartinėParašytas: 2015 Vas 08 23:07 
Flooderis arba specialistas
Vartotojo avataras

Užsiregistravo: 2012 Lap 08 12:55
Pranešimai: 612
Karma: 28
psychical rašė:
MySQL jau pamiršk, jei mokai, mokink ant to kas veikia ir veiks ateityje, tai mysqli ir pdo.

Beje, užtenka pilnai ir: $kazkas = addslashes(htmlentities($_GET['kazkas']));
Esmė ta, kad net PDO nesugeba susidoroti su HTMLENTITIES, tad jis yra būtinas, kad būtų paverstas į kodą, ne simbolius.

Dėl to ir pateikiau visus variantus, pamoka yra dabartinei padėčiai pagerinti, 95% visų lietuvių šioje srityje dar besinaudoja old guy MySQL, su addslashes galima praslysti su sql injection, pvz kurį ir pats išbandžiau
http://stackoverflow.com/questions/8609 ... addslashes
o komentaras
  1. Aišku šis extensionas bus ateityje pašalintas iš PHP

ir buvo su mintimis, kad tai MySQL galima naudoti bet nebus naudojama ateityje, bet kokiu atvėju pats supranti jeigu čia viską gražiai aiškinti iš eilės tai tektų prisegti .pdf guidą su 50 psl teksto, pateikiau tik pagrindus, nieko nesigaudančiam pasitvarkyti, taipogi jeigu nori/gali papildomai kažkokių minčių prideti, esi moderatorius, edit mygtuku gali papildyti mano post. :)


Atsijungęs
 Aprašymas  
 
 Pranešimo tema: Re: [Pamoka] Puslapio sms sistemų, amxbans ir t.t apsaugos
Žinutės numeris: #5  StandartinėParašytas: 2015 Vas 09 10:52 
AMX Mod X ekspertai
Vartotojo avataras

Užsiregistravo: 2011 Sau 08 18:44
Pranešimai: 509
Karma: 50
Dar galima paminėti, kad prieš atliekant query, galima su PHP patikrinti įvestus duomenis pagal iš anksto numatytą whitelistą, pvz. jei žinai, kad duomenis turi būti sudaryti tik iš skaičių tai tikrini su is_numeric. Arba jei žinai, kad stringas negali būti ilgesnis nei X char'ų tikrini su strlen. Emailus ir kitką galima patikrinti su filter_var. Jei pasirinkimai yra iš anksto numatyti, pvz. formos dropdown liste, tai po to jau apdorojant duomenis, reiktų patikrinti ar pasirinkimas atitinką nors vieną iš numatytų. Ir t.t. ir pan...



_________________
Populiariausi CS mapai
Atsijungęs
 Aprašymas  
 
 Pranešimo tema: Re: [Pamoka] Puslapio sms sistemų, amxbans ir t.t apsaugos
Žinutės numeris: #6  StandartinėParašytas: 2015 Vas 12 11:40 
Viršininkas
Vartotojo avataras

Užsiregistravo: 2011 Kov 12 22:19
Pranešimai: 2067
Karma: 94

Miestas: Linksmakalnis
Nujei pradedam apie tai :D Tai jei skaičius turi būt tai
  1. $skaicius = (int) $_GET['skaicius'];


-- 2015 Vas 12 11:40 --

Šiaip, dar vienas pastebėjimas, kad jei sakykim turit 10, 20 POST ar GET, kad nereikėtų visų rašinėt atskirai ir escape'inti, tam yra apėjimas:

  1. $escapedPost = array_map('addslashes', $_POST); //Visiems _POST pritaikys addslashes
  2. $escapedPost = array_map('htmlentities', $escapedPost); //Visiems _POST pritaikys htmlentities



_________________
WWW.REZ.LT - Geri, bet ne geriausi serveriai Lietuvoje
CS/CS:S/CS:GO/MC/Killing Floor Serverių monitoriai su žaidėjų atvaizdavimu
50% paramos atgavimas, perkant VPS Dedikuoti.lt
Atsijungęs
 Aprašymas  
 
 Pranešimo tema: Re: [Pamoka] Puslapio sms sistemų, amxbans ir t.t apsaugos
Žinutės numeris: #7  StandartinėParašytas: 2015 Vas 13 10:56 
Flooderis arba specialistas
Vartotojo avataras

Užsiregistravo: 2012 Lap 08 12:55
Pranešimai: 612
Karma: 28
psychical rašė:
Nujei pradedam apie tai :D Tai jei skaičius turi būt tai
  1. $skaicius = (int) $_GET['skaicius'];


-- 2015 Vas 12 11:40 --

Šiaip, dar vienas pastebėjimas, kad jei sakykim turit 10, 20 POST ar GET, kad nereikėtų visų rašinėt atskirai ir escape'inti, tam yra apėjimas:

  1. $escapedPost = array_map('addslashes', $_POST); //Visiems _POST pritaikys addslashes
  2. $escapedPost = array_map('htmlentities', $escapedPost); //Visiems _POST pritaikys htmlentities

Kažkodėl su array_map su addlashes tiek GET tiek POST reikšmė pametama, jeigu bandai ją kitam faile gauti, tai kaip buvo pirma ideja patogumo atžvilgiu, ar viskas gerai jeigu formos yra tam pačiam faile netikrinau.


Atsijungęs
 Aprašymas  
 
 Pranešimo tema: Re: [Pamoka] Puslapio sms sistemų, amxbans ir t.t apsaugos
Žinutės numeris: #8  StandartinėParašytas: 2015 Bal 06 16:05 
Flooderis arba specialistas
Vartotojo avataras

Užsiregistravo: 2011 Rgp 18 17:44
Pranešimai: 836
Karma: 39
V1LKAS rašė:
Pavyzdys su amxbans 6.xx Blind sql injection ir kaip tai sutvarkyti:
---------------------------------------------------------------------------------
į ban_details.php po session_start(); eilutės įrašome:
  1. $bid = mysql_real_escape_string($_GET['bid']);
  2. $bhid = mysql_real_escape_string($_GET['bhid']);

Per Amxbans 6.13 nerandu tokio failo kaip "ban_details.php".

Kaip sutvarkyti šitus?
Paveikslėlis


Atsijungęs
 Aprašymas  
 
Rodyti paskutinius pranešimus:  Rūšiuoti pagal  
 Puslapis 11 [ 8 pranešimai(ų) ] 


Dabar prisijungę

Vartotojai naršantys šį forumą: Registruotų vartotojų nėra ir 2 svečių


Jūs negalite kurti naujų temų šiame forume
Jūs negalite atsakinėti į temas šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite trinti savo pranešimų šiame forume
Jūs negalite prikabinti failų šiame forume

Ieškoti:
Pereiti į:  

cron