Autor Zpráva
peprikamo
Profil
Dobrý den,

mam takový problém, když chci zapsat do databáze nějaké české znaky,( které procházejí kontrolou stripslasches, htmlentites, mysql_real_escape_string. ) tak při jejich zavolaní mí příjde výsledek bez diakritiky resp. místo č => é atd.

Bez těchto kontrol to funguje normálně, ale nerad bych aby mi tam někdo píchal injekce :D..

Děkuji za rady
quatzael
Profil
peprikamo:
Jestli to máš přímo v databázi správně, tak je to ok. Pravděpodobně si ty záznamy z databáze vypisuješ na stránku kde nemáš nastavený kódování(UTF-8).
Při správném kódování by Ti to mělo normálně fungovat.


Omlouvám se, možná jsem špatně pochopil dotaz.
Já jsem myslel, že máš na mysli kontroly = vypisování proměnných. Pokud myslíš ty stripslashes apod., tak mě teď momentálně nic nenapadá, nevím jak ty funkce přesně fungujou.
Zkus teda ty funkce provádět po jedné postupně, ať zjistíš, která to přímo dělá.
han5vk
Profil
Prečo používaš takéto blbé ošetrovanie, a navyše htmlentities? Stačí ti použiť prepared statements, prípadne mysqli_real_escape_string (mysql_* je deprecated a bude vyradené z ďalších verzíí PHP). Nepotrebuješ stripslashes ani htmlentities. Na ošetrenie výstupu pri výpise na stránku sa potom používa htmlspecialchars. Aplikuj toto a potom napíš ako to vyzerá s českými znakmi.
peta
Profil
peprikamo: Mas link na stranku a link na kod? Zatim bych predpokladal totez, co quatzael, ze mas chybne kodovani ve strance, kde to zobrazujes, pripadne tam nemas SET NAMES a pod. Ani jedna z popsanych funkci nema primy vliv na kodovani.
Tori
Profil
peprikamo:
Zkuste vyhodit jenom htmlentities a zkontrolovat, jestli se to pak zobrazí správně. Mám z toho pocit, že vstupní data jsou v kódování windows-1250, ale u htmlentities jste neuvedl kódování vůbec, takže se použilo výchozí latin-1, které znaky s diakritikou interpretuje jinak. Tím by vznikly ty záměny typu č -> è, ě -> í apod.
edit: Zkoušela jsem a fakt to takhle funguje: "ěščřžýáí" (win-1250) se po zpracování funkcí htmlentities bez nastaveného kódování změní na "ìšèøžýáí".
peprikamo
Profil
Diky vsem za rady:

vyzkousel jsem vyhodit htmlentites a FIČI TO! , ale nevim jestli to je teď imunní vúči injekci? ale myslím si, že jo, jelikož mám tam takové funkce., jedná pro oštření webu druha na ošetření zapisu do db
function sanitizeString($var){
        if(get_magic_quotes_gpc()) $var = stripslashes($var);
        
        $var = strip_tags($var);
        return $var;
    }
    function sanitizeMySQL($var){
        $var = mysql_real_escape_string($var);
        $var = sanitizeString($var);
        return $var;
    }



:D možná jsem příliž paranoidní :D
juriad_
Profil *
Pri ukladani do db proved jako posledni mysql_real_escape_string. Jine funkce pro osetrini sql injection nejsou treba.

Pri vypisu na stranku chces casto pouzit htmlspecialchars. Je lepsi tu funkci provadet az pri vypisu. Zajistis si tim konzistenci dat v databazi.

Ohledne strip_tags, pokud to opravdu chces pouzit, proved to pred escapovanim. Casto je lepsi uzivatele nechat napsat tag s tim ze ho escapujes pri vypisu htmlspecialchars.

Toto je take duvod proc nelze napsat sanitizacni funkci univerzalne. Tak abys ji mohl pouzit kdykoli bez poskozeni dat. Lepsi je naucit se pouzit tu jednu spravnou funkci v pravy okamzik.
peta
Profil
juriad: injection do sql, aje injection do html framy, js scripty a tak? :)

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:

0