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:

<?php
if (isset($_POST['azonosito'])) 
	{
	
	$kapcsolat=mysql_connect("1.2.3.4", "user", "pwd");
	
		if ( !$kapcsolat) die ("Nem lehet létrehozni a kapcsolatot!<BR>");

		else {
			mysql_select_db( "adatbazis", $kapcsolat ) or die ( "Nem található az adatbázis, vagy sérült." );
	
			$lekerdezes="SELECT * FROM felhasznalok where azonosito='" . $_POST["azonosito"] . "'";
			$eredmeny=mysql_query($lekerdezes);					
			$sor = mysql_fetch_row( $eredmeny );

			session_start();

			if ($sor[1]==$_POST['pass'] and $sor[1]!='') //a jelszó nem lehet üres sztring!!
			{ 
				
				$sor[1]="";  //a pass változó törlése, hogy ne maradjon a session-ben

				session_register('sor'); //csak azután regisztrálom, miután a pass-t kitöröltem !!
				session_register('auth');
				$_SESSION['auth']=1;

				
				//ezután a kívánt oldal betöltése
			}

			else
			{
				session_unset();
				session_destroy();
				//kiirni, hogy nem tudtál bejelentkezni
			}
			
		}
}

else
	{
		$_SESSION['auth']=0; 
//utána vissza a kezdőoldalra



?>
Ü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 :)