ugrás a tartalomhoz

Mennyire biztonságos beléptetés?

Anonymous · 2006. Jan. 22. (V), 16.40
Sziasztok!

A kérdésem az lenne, hogy egy ilyen kód mennyire biztonságos beléptetésnek? Vagy mik a gyenge pontja, mit hagytam ki? Azt még hozzáfűzöm, hogy nem egy meghirdetett oldalon lenne, tehát csak fix IP alapján lenne elérhető. Válaszaitokat előre is köszönöm. És akkor a kód:
  1. <?php  
  2. if (isset($_POST['azonosito']))   
  3.     {  
  4.       
  5.     $kapcsolat=mysql_connect("1.2.3.4""user""pwd");  
  6.       
  7.         if ( !$kapcsolatdie ("Nem lehet létrehozni a kapcsolatot!<BR>");  
  8.   
  9.         else {  
  10.             mysql_select_db( "adatbazis"$kapcsolat ) or die ( "Nem található az adatbázis, vagy sérült." );  
  11.       
  12.             $lekerdezes="SELECT * FROM felhasznalok where azonosito='" . $_POST["azonosito"] . "'";  
  13.             $eredmeny=mysql_query($lekerdezes);                   
  14.             $sor = mysql_fetch_row( $eredmeny );  
  15.   
  16.             session_start();  
  17.   
  18.             if ($sor[1]==$_POST['pass'and $sor[1]!=''//a jelszó nem lehet üres sztring!!  
  19.             {   
  20.                   
  21.                 $sor[1]="";  //a pass változó törlése, hogy ne maradjon a session-ben  
  22.   
  23.                 session_register('sor'); //csak azután regisztrálom, miután a pass-t kitöröltem !!  
  24.                 session_register('auth');  
  25.                 $_SESSION['auth']=1;  
  26.   
  27.                   
  28.                 //ezután a kívánt oldal betöltése  
  29.             }  
  30.   
  31.             else  
  32.             {  
  33.                 session_unset();  
  34.                 session_destroy();  
  35.                 //kiirni, hogy nem tudtál bejelentkezni  
  36.             }  
  37.               
  38.         }  
  39. }  
  40.   
  41. else  
  42.     {  
  43.         $_SESSION['auth']=0;   
  44. //utána vissza a kezdőoldalra  
  45.   
  46.   
  47.   
  48. ?>  
Üdvözlettel: Viktor
 
1

hibák

Anonymous · 2006. Jan. 22. (V), 17.19
1, sql inject elleni védelem nincsen. ha jól emlékszem a "védelem a frontvonalon" c. weblaborcíkkben volt róla szó.

2,
session_register('sor');
session_register('auth');
$_SESSION['auth']=1;

Használd a többi session válozó felvételéhez is a $_SESSION tömbbőt:
$_SESSION['sor'] = $sor[1]

3,
Regisztrációnál szűrni kell, hogy ne legyen két azonos azonosító.

4,
php-ben a többök indexelése 0-val, és nem 1-el kezdődik.

5,
php dokumentációban tippként szerepel, hogy az sql kapcsolat adatait lehőleg ne a root-ba, hanem egy könyvárral lejebb tároljuk.

6,
session_start -ot érdemes a lap elején elindítani, és én még pufferelném a kimenetet is.
14

PHP a frontvonalon, védekezés a bemeneten

pint3r · 2011. Már. 26. (Szo), 11.00
A konkrét cikk amiben az SQL injection említésre kerül:
PHP a frontvonalon, védekezés a bemeneten
2

Huhúúú

Anonymous · 2006. Jan. 23. (H), 10.18
Azta mindenit! A klasszikus állatorvosi ló!
Hagyján, hogy bármit ki lehet törölni az adatbázisodból ezen zseniális kód miatt, még bárki, jelszó nélkül is beléphet...
Elég veszélyes ez a PHP, hogy 10 sorban ennyi hülyeséget tudsz leírni :)
3

Nem kell leszolni

Jano · 2006. Jan. 23. (H), 10.51
Nem kell leszolni, azert kerdezett mert erezte, hogy nem minden tekintetben jo a megoldasa. Masokban fel se merulne ilyen.
5

<Nincs cím>

suexID · 2006. Jan. 23. (H), 12.39
Ő legalább vállalta, hogy van még mit tökéletesíteni a tudásán, ellentétben veled, aki itt osztod őt névtelenül
6

A hülyék védelmében

Anonymous · 2006. Jan. 23. (H), 14.23
Mi a fene, Robin Hood személyesen? A hülyék védelmében? LOL
9

A hülyék képviseletében?

Dualon · 2006. Jan. 23. (H), 17.19
Azért neked is segítünk ám, ha kell!

D.
http://e-arc.hu/
10

<Nincs cím>

suexID · 2006. Jan. 23. (H), 17.20
Nem vagyok Robin Hood, bár egy dologban hasonlítunk, Ő is jóképű! ;)
(nyugi, téged is megvédelek kedves névtelen idegen)
4

<Nincs cím>

halee · 2006. Jan. 23. (H), 11.51
Hello!

Kicsit az tűnik nekem meredeknek így elsőre, hogy session-ben kitolod a jelszót.. meg hát ugye, hogy semmi md5 és hasonló - bár én az adatbázisba való tárolásra esküszöm... Szerintem azt nem érdemes kézpénznek venni, hogy a sessionváltozókhoz úgysem fér hozzá senki - mert ugye volt már ilyen a világtörténelemben. Meg aztán a session lopás - na az ellen nem véd. Meg a kód végén hiányzik egy "}", de gondolom az eredetiben benne volt, mivel hibát okozna... :)

üdv, Halee
7

<Nincs cím>

Szekeres Gergő · 2006. Jan. 23. (H), 16.44
Én lementeném a sessionba a kódot, ipt és az azonosítót, majd minden lapletöltéskor leellenőrizném a session-adatok hitelességét.

Amúgy meg inkább itt derüljön ki a hiba, mint "élesben"!

---
Könnyebb valamit jól megcsinálni, mint megmagyarázni, miért lett rossz.
8

-

Dualon · 2006. Jan. 23. (H), 17.17
Ha kód alatt a jelszót érted, azt én nem tárolnám sessionben. Még md5 hash-ként, vagy valamilyen titkosító algoritmussal elrejtve sem; előbbire egész hash-könyvtárak, utóbbira okos elmék vannak. :)
IP-vel az a gond, hogy pl. az egyre terjedő otthoni routerek mögül, vagy céges környezetből, stb. jövő userek mind egy IP-t kapnak (gy.k. nem lehet tudni, egy routerhez ki tartozik).

A megnövelt élettartamú sessionök (akár session.cookie_lifetime, akár session_set_save_handler()-rel saját sesikezelés) adhatnak egy megoldást, HTTPS-sel megfejelve egy kicsit jobbat, és arra még én is keresem a választ, milyen a visszatérő látogatók ideális felismerése, azonosítása. :)

D.
http://e-arc.hu/
11

félreértettél

Szekeres Gergő · 2006. Jan. 23. (H), 18.58
a jelszavad dologban lehet valami.

De az ipvel félreértettél. Nem azt mondtam, hogy pusztáln IP alapján azonosítsunk usereket, hanem alapszintű védelmet ad session hijacking támadások ellen.

---
Könnyebb valamit jól megcsinálni, mint megmagyarázni, miért lett rossz.
12

<Nincs cím>

-zsolti- · 2006. Jan. 23. (H), 19.13
Elég egy userID-t és egy visszaellenőrző salted hasht letárolni, amit a userID-ből készítesz (cookie ellenőrzésnél is használható), pl:
ID: 28
HASH: 60591f84a283bdefbdc6dee6022b31d6

Ezt pedig minden oldalbetöltődésnél tudod ellenőrizni:

if(md5('Jjd87n'.$_SESSION['ID'].'M90sa') == $_SESSION['HASH']) {
  // érvényes session, azonosítható az ID-vel
}


Üdvözlettel: Liebig Zsolt
SWEN INTERNET
13

Köszönet

Anonymous · 2006. Jan. 24. (K), 12.59
Köszönöm a sok hozzászólást. Valóban, éppen azért kérdeztem, hogy mi a baj vele, hogy ne élesben derüljön ki. Biztos senki nem úgy kezdte a biztonságos rendszerét építeni, hogy elsőre tökéletes volt.
A jelszót törlöm, miután leellenőriztem, és nem hagyom a sessionben. Az ip, felh.név, stb. dolgok meg maradnak benne. (persze csak ami nem igényel biztonsági megfontolásokat.)
Azt hogy kell érteni, hogy jelszó nélül is be lehet lépni?

A többit meg nem kérdezem meg, inkább utánanézek :)