Dobrý den, mám takový zdlouhavý, dotaz - snad mě pochopíte:
Mám v PHP aplikaci pro více uživatelů a pro přihlašování používám cookies. Do každé stránky mám naincludovaný soubor, kde se testují hodnoty v cookie a následně (pokud jsou hodnoty správné) se vyberou hodnoty z databáze dle cookie (například do proměnné $cislo=číslo uživatele). Dále se pak v mnoha dalších různých souborech hodnoty v databázi mění. Občas se ale stane, že určitá hodnota se přiřadí někomu úplně jinému, než by měla.
A tak se ptám, je možné, že by se na serveru nějak míchaly proměnné? Přiklad: On-line jsou třeba 2 lidé a najednou zvolí určitou akci. V souboru je příkaz MySQL_Query("UPDATE tabulka SET sloupec='$neco' WHERE cislo='$cislo' "); Server si poplete hodnoty (přidá do sloupce sloupec hodnotu z proměnné $neco jinému uživateli, než který ji zvolil)? Je toto možné? Pokud ano, nevíte prosím někdo, jak tomu zamezit? Pokud ne, nevíte prosím někdo, čím by to mohlo být způsobené? Děkuji všem za rady.
Fórum › PHP
Míchání proměnných na serveru?
to ze by sa premanne samovolne prehadzovali je blbost. skus sem hodit uplnejsiu cast kodu pripadne popisat povod tych hodnot lebo odkial je $nieco a $cislo fakt netusim.
Toto je soubor naincludovaný do každé stránky
<?php
$login = $_COOKIE['login'];
$cara = strpos($login,'&');
$prihlasovaci_jmeno2 = substr($login,0,$cara);
$prihlasovaci_heslo2 = substr($login,$cara+1);
$kontrola_proti_heku = MySQL_Query("SELECT * FROM hraci WHERE jmeno='$prihlasovaci_jmeno2' AND heslo='$prihlasovaci_heslo2' ");
$kontrola_proti_heku2 = MySQL_Num_Rows($kontrola_proti_heku);
if ($kontrola_proti_heku2 == 0) header("Location: vodjed.php");
$ty = MySQL_Query("SELECT * FROM hraci WHERE jmeno = '$prihlasovaci_jmeno2' ");
$tvuj_narod = MySQL_Result($ty,0,'narod');
$jmeno_hrace = MySQL_Result($ty,0,'jmeno_hrace');
$cislo_hrace = MySQL_Result($ty,0,'cislo');
$tvoje_zlato = MySQL_Result($ty,0,'zlato');
$tvoje_jidlo = MySQL_Result($ty,0,'jidlo');
$tvoje_kola = MySQL_Result($ty,0,'kola');
?>
A v jiném souboru je pak třeba:
MySQL_Query("UPDATE produkce SET kolik='$produkce_kolik' WHERE typ='t' AND kdo='$cislo_hrace' ");
trochu zosiroka: cookies niesu tak bezpecne ako si asi myslis takmer hocikto ti tam moze hocico podstrcit a tvoj skript (aj keby fungoval) dopadne na hubu. google: cookies, sql injection, ...
if ($kontrola_proti_heku2 == 0) header("Location: vodjed.php");
ked som to pochopil tak to ma byt prave jedna (pri uspesnom logine) takze radsej if($kontrola_proti_heku2 != 1) ...
dalej vyberas * a potom to vykusujes pomocov mysql_result. je lepsie vymenovat stlpce.
k dotazu: skus napisat co robis, co je v tych tabulkach. lebo kod je dost chaoticky
Hmm, s těmi SQL injekcemi jsem tady na to zorvna zapomněl, díky za tip. Jinak nevím jak bych to poslal, myslel jsem si, že $cislo_hrace blbne právě tady. Důsledky toho se ale mohou projevit asi tak v 30 dalších souborech, a to sem kopírovat nebudu. Myslel jsem, že by se to dalo vyřešit nějak obecně, ale asi ne. Nemáš tedy prosím nějaký obecný nápad? Díky
To Nefaritus : Sessions jsem tam měl před tím a pak jsem tam dal cookies, myslel jsem, že se to tím vyřeší, ale ne :smile1:
Musím podotknout, že tvůj systém je velice nebezpečný. Třeba tato část kódu:
if ($kontrola_proti_heku2 == 0) header("Location: vodjed.php");
(Mimochodem, kontrolovat by se mělo na jedničku)
Tohle ti sice přesměruje neoprávněného uživatele někam do prkvančic, ale to je jen informace v hlavičce, které rozumí prohlížeč, že se má někam přesměrovat, ale nezamezí tov dalším vykonávání scriptu!! Správně musíš volat hned po location fci exit();
Další věc: Ukládat Login i s heslem do Cookie je děsně nezodpovědný, neuvědomuješ si riziko jaké by nastalo např. při zneužití XSS, nebo třeba jenom nesmázlé cookie někde ve veřejné kavárně?
Co se týče SQL injejction, tak pokud máš na serveru puštěný magic_quotes_gpc (nedoporučuji mít spuštěné, ale na většině hostingů je to výchozí volba), tak se prakticky nemusíš o nic starat. Pokud ne, tak musíš řetězce prohnat fcí mysql_real_escape_string($string), to doporučuji ikdyž je magie zapnutá, potom by to vypadalo: mysql_real_escape_string(stripslashes($string)).
To neimenuje : No, díky za rady
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Míchání barev — založil Spectator
Míchání barev v CorelDraw 12 — založil Tomáš Erst
Míchání barev ve Photoshopu CS6 — založil Tomáš Erst
Výpis proměnných — založil Akk
Záměna proměnných — založil Anonymní uživatel
Moderátoři diskuze