Autor Zpráva
Anonymní
Profil *
Zdravim. Mam taku jednu technicku otazku. Ked ukladam data do databazy z nejakych formularov tak sa ich snazim osetrovat proti injekcii. Bud assslashes, zapnutim magic_quotes_gpc alebo mysql_real_escape_string. No nezavisle na pouzitom sposobe sa mi data ulozia do databazy bez spatnych lomitok. Tym nechcem povedat ze by to bolo zle, len vsade na forach citam nieco o strislashes, a ja nevidim dovod na pouzivanie. Kedze vsetko je na vystupe uz pekne stripnute. Zaujimalo by ma co ma na to vplyv, mam 5.0.51b-community. Ocenim kazdu radu skusenych programatorov, napr. aj vplyv uzatvarania premenncy do uvodzoviek v php a slashovanim uvodzoviek, alebo pouzivanim uvodzoviek v mysql dotazoch. Vdaka.
Joker
Profil
No jednoduše, když je addslashes, měla by být i obrácená funkce, ne?

Pravda, kdyby nebyly "magic quotes" (podle mě největší pitomost v celém PHP), možná by strip_slashes nebylo potřeba.
Takhle to používám skoro všude, co je myšlené pro použití na víc než jednom konkrétním serveru. Na začátku se vždycky detekuje nastavení magic_quotes_gpc a pokud je zapnuté, příslušná superglobální pole se zase "odlomítkují". Viz také http://php.vrana.cz/vypnuti-magic_quotes_gpc.php
Anonymní
Profil *
Ach jaj.. Dakujem za odpoved ale toto mi je vsetko jasne.. Este raz. Mam vypnute magic quotes. Do vstupu dam uvodzovky, lomitka na skusku. Osetrim post pomocou adslashes() a ulozim to aj s sql dotazom INSERT do premennej $query. Vlozim to do databazy mysql_query($query). Vypisem hodnotu premennej query, resp. odoslem do prehliadaca - lomitka, uvodzovky, apostrofy su slashnute.. Zapnem riadkoveho klienta vyberiem databazu, SLECTNEM to co som prave vlozil a tam to slashnute nie je. Preco to je tak?
Ked to potom taham do php tiez to nie je, takze ziadne stripslashes nepotrebujem. Injekcia nefunguje, skusal som, vsetko sa slashne.. Otazke je ze preco sa to neuklada slashovane, v akom bode spracovania kodu sa to odstrani a kde sa to da nastavit.
Anonymní
Profil *
Predpokladal by som ze to bude az na strane MySQL takze by som sa priklanal skor tam ako k nejakym nastaveniam PHP. Nekto znaly konfiguracie MySQL servera neporadi?
Joker
Profil
Anonymní
Řekl bych, že přesně nerozumíte smyslu těch lomítek.

Zpětné lomítko zmizí ze stejného důvodu, z jakého zmizejí třeba i ty uvozovky, závorky, slovo INSERT, apod.
Všechno to jsou prostě řídicí příkazy pro databázový stroj. To samé zpětné lomítko. Zjednodušeně to je "příkaz pro databázi"- říká něco jako "následující znak nikdy neinterpretuj jako řídicí znak pro databázový stroj"
Např.: pošlu "\"" => MySQL interpretuje: začátek řetězce, následující znak neinterpretuj, uvozovka, konec řetězce. Výsledkem bude řetězec obsahující uvozovku.

No a protože "příkaz" je i samotné zpětné lomítko, pokud ho chcete dostat do databáze, musí mu taktéž předcházet zpětné lomítko.
Anonymní
Profil *
Aha uz tomu rozumiem :) Prepacte som lama. Presne take nieco som potreboval pocut. A preco sa to potom vo vsetkych tutorialoch a topicoch stripslashuje na vystupe? Aj pan Vrána tu píše že je to zbytocne. http://php.vrana.cz/obrana-proti-sql-injection.php#d-129 Ale zase v tomto clanku hovori ze to je nutne nak ja som asi slabomyselny.. http://php.vrana.cz/vypnuti-magic_quotes_gpc.php
Joker
Profil
Anonymní
A preco sa to potom vo vsetkych tutorialoch a topicoch stripslashuje na vystupe?
Ve kterých konkrétně "všech"?
V tom odkazovaném článku to p. Vrána píše o nastavení magic_quotes_gpc a píše to správně. S vypnutým magic_quotes_gpc lze data z get/post/cookie vypisovat do stránky přímo, ale při zápisu do databáze se musí escapovat. Se zapnutým magic_quotes_gpc je nutné do stránky vypisovat přes strip_slashes() a do databáze teoreticky jde ukládat přímo. Nicméně jelikož databáze mívají vlastní escapovací funkce, úplně "čistý" zápis dat do databáze by byl strip_slashses a potom je prohnat escapovací funkcí pro danou databázi- což je teda dost ulítlé :)

Osobně jsem u magic_quotes_gpc skončil na tom, že něco takového existuje, že je to s prominutím totální ******** a že je potřeba to vyrušit (třeba tím skriptem v odkazovaném článku), pokud má být skript přenositelný mezi více servery.
Dál už stačí psát, jako by žádné magic_quotes_gpc neexistovalo :-)
Anonymní
Profil *
Vyborne, uz tomu rozumimem dakujem. Uz ste mi objasnili ako to myslel vypisovat data z venku.
Este posledna otazka: 'potom je prohnat escapovací funkcí pro danou databázi'
Aku konkretne funkciu mate na mysli? Napr. pre MySQL je to spominana mysql_real_escape_string?
Vdaka.
Joker
Profil
Anonymní
Aku konkretne funkciu mate na mysli? Napr. pre MySQL je to spominana mysql_real_escape_string?
Ano.

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: