Mogens Jensen forklarede den 05-01-2011:
> "Birger Sørensen" <sdc@bbsorensen.com> skrev i meddelelsen
> news:4d24cde5$0$23751$14726298@news.sunsite.dk...
>> Mogens Jensen forklarede:
>> Hent dem ind i et textarea f.eks. Der skulle linieskift gerne vises.
>>
>> Birger
>
>
> Jeg nok formuleret mig dårligt og vil prøve at omformulere mit spørgsmål
>
> funktionen 'mysql_real_escape_string' fjerner/stripper forskellige
> karakterer af hensyn til ikke at få uheldige injektioner i
> databasekommandoer.
>
> f.eks. skal backslashes, lighedstegn og paranteser fjernes fra
> inddata inden inddataene fortsætter på deres vej i en INSERT
> eller UPDATE kommando fordi VALUES mv. kan misfortolkes
> eller misbruges af hackere.
>
> Men hvorfor fjerner funktionen også hex '0d0a', som jeg gerne vil have
> bibeholdt. Hvad er grunden til det? hvis der er nogen?
>
> Jeg kan ikke se at disse karakterer skader, men er det korrekt.
> Siden funktionen fjerne karaktererne, så er det vel fordi de har en
> uheldig funktion i databasen eller hva'?
Som grisen påpeger, fjerner funktionen ikke noget, men tilføjer \ foran
input der kan gøre skade.
Du snakker om hex værdier. Escape funktionen påvirker ikke tal, og bør
ikke bruges på numeriske data.
Numeriske data kan du blot caste som (int) eller hvad de nu er, inden
du bruger dem - så kan der ikke være nogen injektion, eftersom der er
tale om numeriske værdier.
Du skrev at du skiftede til mysqli. Du skal i den forbindelse være
opmærksom på at escape funktionerne kræve en forbindelse til databasen,
og det skal være den rigtige, for at virke - ellers returnerer de tomme
strenge. Du kan ikke bruge mysql funktionen med en mysqli forbindelse,
eller omvendt, og der er forskel på hvordan de kaldes. Det kunne være
det du oplever.
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk