Toto je zaciatocna cast toho skriptu. Skript pochadza z knihy o php od wrox
Kód: Vybrať všetko
// Kontrola, zda uživatelské jméno souhlasí s identifikátorem uživatele
// (aby hackeři nemohli manipulovat s údaji jiných uživatelů).
$query = 'SELECT nick FROM uzivatel WHERE user_id = ' . (int)$user_id .
' AND nick = "' . mysql_real_escape_string($_SESSION['nick'], $db) .
'"';
$result = mysql_query($query, $db) or die(mysql_error());
if (mysql_num_rows($result) == 0) {
?>
<p><strong>Nemáte oprávnenie pre zmenu údajov!</strong></p>
<?php
mysql_free_result($result);
mysql_close_db($db);
include 'include/zaobend.php';
die();
}
mysql_free_result($result);Fatal error: Call to undefined function: mysql_close_db() in /data/h/o/holubar.sk/web/uzivatelsky-system/uprava_osobnych_udajov.php on line 41
Ked som na localhoste dostaval spravy o tom, ze php nerozozna funkcie mysql, tak som mal chybu bud v konfiguracii php.ini resp apache. Uz som pisal aj mail na helpdesk, no rad by som sa spytal aj tu.
A ked uz som tu uviedol tu cast skriptu, hned sa aj spytam na jej vyznam. Ten mi totizto nie je jasny. Ako moze hacker manipulovat s cudzim uctom, ked pre kazde konto je user_id aj username odovzdavane bud cez POST, alebo cez SESSION. Ten test v podstate len porovnava user_id, ktore je tahane z db a nick, ktory bol odovzdany do $_SESSION bud po prihlaseni alebo registracii. Tak aky by mohol byt mechanizmus, aby to nesedelo a niekto sa tak dostal k cudziemu kontu?
A dalsia otazka je na to (int) v tejto casti kodu:
Kód: Vybrať všetko
$query = 'SELECT nick FROM uzivatel WHERE user_id = ' . (int)$user_id .//autoeditácia príspevku (26 Feb 2010, 0:05)
Tak po chvili patrania som zistil, ze v knihe spravili chybu a ta funkcia ma byt spravne mysql_close bez _db, no ale stale nerozumiem, preco na serveri vyhodnoti tento test ako true, ked na localhoste je false a preskoci ho.
No aj tak by som bol vdacny za objasnenie tych dalsich otazok
//autoeditácia príspevku (26 Feb 2010, 0:57)
Ten skript nefungoval ani po opraveni tej chyby a po jeho spusteni sa zmazal cely obsak premennych $_POST a $_SESSION, tak som pozrel do nastaveni php a vypol som na serveri register_globals. Po tejto zmene skript funguje aj na serveri tak ako ma. Vie mi niekto objasnit aj tuto zahadu?