Autor Zpráva
Gecko
Profil *
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
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 *
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 *
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
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 *
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 *
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 *
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
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 *
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
[#12] Enko
Viz FAQ funkce db_escape().
Popřípadě projít všechny vstupy v cyklu a popsaným způsobem se zbavit lomítek.
Enko
Profil *
Alphard:
Děkuji

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: