Autor | Zpráva | ||
---|---|---|---|
Gecko Profil * |
#1 · Zasláno: 18. 3. 2012, 10:44:52 · Upravil/a: Moderátor (editace znemožněna) 18. 3. 2012, 11:57:58
Zdravím,
rád bych se zeptal. Využívám CMS a v něm mám formulář, který posílá data do jiné databáze na localhostu. Mám tedy: $server_root="sql.example.tld"; $user_root="********"; $password_root="**********"; $database_root="**********"; $connect_root=mysql_connect($server_root,$user_root,$password_root); mysql_select_db($database_root, $connect_root); mysql_query("SET CHARACTER SET utf8"); a následně mysql_update(".........'",$connect_root), 0) Problém je ale v tom, že jakmile kód dojede na formulář, dál usekne veškeré připojení (vypíšou se další části, které jsou připojené skrze CMS a tahají se z její DB). Zkoušel jsem mysqlclose(); ale nepomáhá. Myslím, že dělá neplechu tent kód: mysql_select_db($database_root, $connect_root); Dá se nějak definovat výběr databáze, aby nedělal neplechu? |
||
panther Profil |
#2 · Zasláno: 18. 3. 2012, 10:47:38
Gecko:
„Myslím, že dělá neplechu tent kód:“ proč myslíš? Musíš definovat/vybrat databázi, s kterou se bude pracovat. Po novém připojení samozřejmě musíš opět vybrat databázi, s níž se má pracovat. „Zkoušel jsem mysqlclose()“ myslíš mysql_close, že? |
||
Gecko Profil * |
#3 · Zasláno: 18. 3. 2012, 10:50:18 · Upravil/a: Gecko
panther:
> „Zkoušel jsem mysqlclose()“ > myslíš mysql_close, že? „Musíš definovat/vybrat databázi, s kterou se bude pracovat. Po novém připojení samozřejmě musíš opět vybrat databázi, s níž se má pracovat.“ To jsem taky zkoušel, ale nepomohlo (systém vypsal chybu). Takže jsem to vyřešil takto: mysql_query("INSERT INTO jmenodatabaze.`nejaka-tabulka` SET ...",$connect_root);{ Má tento spůsob nějaká úskalí nebo je to bez problémů? |
||
Alphard Profil |
Gecko:
„systém vypsal chybu“ Nenapadlo vás, že by bylo užitečné napsat jakou? „mysql_update(".........'",$connect_root), 0)“ Nativní funkce mysql_update() neexistuje, nevíme, jak je implementovaná. > mysql_query("INSERT INTO jmenodatabaze.`nejaka-tabulka` SET ...",$connect_root);{ > Má tento spůsob nějaká úskalí nebo je to bez problémů? Normální dotaz do databáze, v čem by měl být problém? Upravím nadpis vlákna, vypadá to děsně. http://www.mojecestina.cz/gramatika/c2009042203-tip--x-typ.html Myslím, že slovo atipický neexituje. |
||
Gecko Profil * |
#5 · Zasláno: 18. 3. 2012, 12:25:37
Alphard:
Pardon alpharde. Čeština mi popravdě nikdy moc nešla :(, pro přístě vím. „Nenapadlo vás, že by bylo užitečné napsat jakou?“ Napadlo, ale je to chyba v části systému (používá vlastní třídu na vkládání dat). Pokud je ten dotaz ok (na apache serveru funguje) tak děkuju za podporu a čas všem. Přeji pěkný den. |
||
Alphard Profil |
#6 · Zasláno: 18. 3. 2012, 12:29:52
Gecko:
„Pokud je ten dotaz ok“ Je. Jestli nemáte na serveru zakázaný přístup do jiné databáze nebo jiné přístupové údaje do té databáze nemůžeme vědět. To musíte zjistit/zkusit sám. Pak tu zajímavou část v SET jste smazal, takže vás nemůžeme ani kritizovat za neescapované uživatelské vstupy :-) „...pro přístě vím“ O nic nejde, proto jsem to zmínil s vysvětlujícím odkazem. |
||
Gecko Profil * |
#7 · Zasláno: 18. 3. 2012, 13:07:53
Vsetu je:
SET id=null, jmeno='"._htmlStr($_POST['jmeno'])."', prijmeni='"._htmlStr($_POST['prijmeni']).", ...', Tam to ošetřené je :) |
||
Alphard Profil |
Těžko říct, co dělá funkce _htmlStr(), mělo by tam být mysql_real_escape_string(). Jestli to jen ničí html, tak přes to projde nejtypičtější ukázka sql injection...
|
||
Gecko Profil * |
#9 · Zasláno: 18. 3. 2012, 13:53:44 · Upravil/a: Gecko
Funkce převede HTML znaky na entity.
Když použiju mysql_real_escape_string tak se do mysql pustí \" \> ''\ když _htmlStr tak se znaky převedou na entity.
|
||
Enko Profil * |
#10 · Zasláno: 19. 3. 2012, 23:06:12
Gecko:
„Funkce převede HTML znaky na entity.“ Na to už ale máme funkci htmlspecialchars() která se ale používá až na výpisu do stránky. „Když použiju mysql_real_escape_string tak se do mysql pustí \" \> ''\ když _htmlStr tak se znaky převedou na entity.“ No jistěže, a to je správně. Jinak si koledujete o SQL Injection viz blog Jakuba Vrány BTW, z posledního průzkumu bezpečnosti webových aplikací se ukázalo, že až 70% webů je nabouratelných přes SQL Injection. Pokud mezi ně chceš patřit, prosím ;) A zpětná lomítka pak samozřejmě na dalším zpracování odstraníte funkcí stripslashes() |
||
Alphard Profil |
#11 · Zasláno: 19. 3. 2012, 23:15:43
Enko:
„A zpětná lomítka pak samozřejmě na dalším zpracování odstraníte funkcí stripslashes()“ Další polopravda, nebo spíše nesmysl. Nesmí být co odstraňovat! Dvojité escapování vzniká kvůli nevhodnému nastavení PHP, které brzy bude minulostí. Jediný správný způsob je nastavení změnit, nebo přidaná lomítka ihned odstranit a pak správně ošetřit. |
||
Enko Profil * |
#12 · Zasláno: 21. 3. 2012, 10:45:26
Alphard:
„Jediný správný způsob je nastavení změnit“ Toto je jasné. „nebo přidaná lomítka ihned odstranit a pak správně ošetřit.“ Můžu poprosit o nějakou ukázku? |
||
Alphard Profil |
#13 · Zasláno: 21. 3. 2012, 17:23:55
|
||
Enko Profil * |
#14 · Zasláno: 22. 3. 2012, 19:49:23
Alphard:
Děkuji |
||
Časová prodleva: 14 let
|
0