/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Hvorfor fjernes hex '0d0a' af funktionen m~
Fra : Mogens Jensen


Dato : 05-01-11 20:51

Jeg bruger funktionen mysql_real_escape_string til at fjerne indlysende
injektioner fra $_POST($inputdata).

det går rimeligt godt for de fleste input type felter.
Textarea felter, giver brugeren mulighed for at taste return for ny linie i
textarea feltet og dette markeres hex '0d0a' i feltet.
Textarea felt skal gemmes i databasen.

Mit spørgsmål er
Siden mysql_real_escape_string også fjerner hex '0d0a' fra feltet,
hvad betyder det så for den videre inserts i databasen.
Jeg kan ikke se at det betyder noget at disse karakterer gemmes,
men er det korrekt.
Siden funktionen fjerne karaktererne, så er det vel fordi de har en
uheldig funktion eller hva'?

--
Mvh. Mogens Jensen


 
 
Birger Sørensen (05-01-2011)
Kommentar
Fra : Birger Sørensen


Dato : 05-01-11 21:01

Mogens Jensen forklarede:
> Jeg bruger funktionen mysql_real_escape_string til at fjerne indlysende
> injektioner fra $_POST($inputdata).
>
> det går rimeligt godt for de fleste input type felter.
> Textarea felter, giver brugeren mulighed for at taste return for ny linie i
> textarea feltet og dette markeres hex '0d0a' i feltet.
> Textarea felt skal gemmes i databasen.
>
> Mit spørgsmål er
> Siden mysql_real_escape_string også fjerner hex '0d0a' fra feltet,
> hvad betyder det så for den videre inserts i databasen.
> Jeg kan ikke se at det betyder noget at disse karakterer gemmes,
> men er det korrekt.
> Siden funktionen fjerne karaktererne, så er det vel fordi de har en
> uheldig funktion eller hva'?

Nu ved jeg ikke lige hvordan du får dine felter til at vise hex-data.
Normalt er en nylinie markeret af \r\n eller blot \n (afhængig af
browser).
Disse karakterer fjernes normalt ikke (måske bliver de oversat af
funktionen?), og hvis du bruger text i databasen til at gemme dine
data, vil du kunne se dem, enten som \r\n, eller \n - eller faktisk et
linieskift. Og det er nok afhængigt af hvordan du får vist data fra
databasen.
Hent dem ind i et textarea f.eks. Der skulle linieskift gerne vises.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Mogens Jensen (05-01-2011)
Kommentar
Fra : Mogens Jensen


Dato : 05-01-11 23:24


"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'?

--
Mvh. Mogens Jensen


scootergrisen (05-01-2011)
Kommentar
Fra : scootergrisen


Dato : 05-01-11 23:50

Så vidt jeg kan læse mig frem til fjerner mysql_real_escape_string()
ingenting men tilføjer \ når den møder nogen bestemte ting som \r og \n.

For mig virker det som om den laver \r\n om til \\r\\n som så gemmes i
databasen.

Prøv at brug stripslashes() på din data inden du viser den og se om det
hjælper.

Birger Sørensen (06-01-2011)
Kommentar
Fra : Birger Sørensen


Dato : 06-01-11 00:33

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



Mogens Jensen (06-01-2011)
Kommentar
Fra : Mogens Jensen


Dato : 06-01-11 09:03


"Birger Sørensen" <sdc@bbsorensen.com> skrev i meddelelsen
news:4d24ff87$0$23751$14726298@news.sunsite.dk...
>
> 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


Det er jo rigtigt at funktionen ikke fjerner noget men blot indsætter \.
Jeg læste ikke ordentligt på funktionens beskrivelse første gang.

Mht. til en link/forbindelse til databasen, så fungerer det ganske fint. Det
kan jeg se
i min debugger. Til gengæld er det ganske svært at følge backslacherne.
Jeg omsætter dem med bin2hex for at få noget lidt mere læsevenligt.
Her kunne jeg ikke umiddelbart se at \n havde fået en ekstra \ monteret.

Jeg skiftede til mysqli og det går fint på de unix servere, hvor
programmerne
udføres. På min testmaskine, som kører windows IIS6, er det endnu ikke
lykkes
mig at aktivere mysqli ordentligt. Måske skulle jeg prøve igen.

--
Mvh. Mogens Jensen


Mogens Jensen (07-01-2011)
Kommentar
Fra : Mogens Jensen


Dato : 07-01-11 00:36


"Mogens Jensen" <mojen@live????.dk> skrev i meddelelsen
news:4d25773a$0$23760$14726298@news.sunsite.dk...
> udføres. På min testmaskine, som kører windows IIS6, er det endnu ikke
> lykkes
> mig at aktivere mysqli ordentligt. Måske skulle jeg prøve igen.
>


Nu har jeg fået aktiveret mysqli efter at have installeret php 5.3.5
så jeg starter forfra i mine studier i funktioner og LF håndtering
--
Mvh. Mogens Jensen


Leif Neland (06-01-2011)
Kommentar
Fra : Leif Neland


Dato : 06-01-11 00:52

Den 05-01-2011 20:51, Mogens Jensen skrev:
> Jeg bruger funktionen mysql_real_escape_string til at fjerne indlysende
> injektioner fra $_POST($inputdata).
>
> det går rimeligt godt for de fleste input type felter.
> Textarea felter, giver brugeren mulighed for at taste return for ny linie i
> textarea feltet og dette markeres hex '0d0a' i feltet.
> Textarea felt skal gemmes i databasen.
>
> Mit spørgsmål er
> Siden mysql_real_escape_string også fjerner hex '0d0a' fra feltet,
> hvad betyder det så for den videre inserts i databasen.
> Jeg kan ikke se at det betyder noget at disse karakterer gemmes,
> men er det korrekt.
> Siden funktionen fjerne karaktererne, så er det vel fordi de har en
> uheldig funktion eller hva'?
>
Brug dog "parameterized queries"/"prepared statements" i stedet for det
escaperi

Leif


--
Bevar P2, luk P3, der er nok P3'er i forvejen.

scootergrisen (06-01-2011)
Kommentar
Fra : scootergrisen


Dato : 06-01-11 05:47

> Brug dog "parameterized queries"/"prepared statements" i stedet for det
> escaperi
>
> Leif

Så kom med et eksempel for os det ik aner hvad fanden det er.

Michael Rasmussen (06-01-2011)
Kommentar
Fra : Michael Rasmussen


Dato : 06-01-11 08:40

On Thu, 06 Jan 2011 05:46:44 +0100
scootergrisen <scootergrisen@NOSPANKYOUgmail.com> wrote:

>
> Så kom med et eksempel for os det ik aner hvad fanden det er.
Den grundliggende ide med usenet er, at det er hjælp til selvhjælp, og
ikke er gratis support!

I dette tilfælde betyder det, at personer, der kommer med hjælp, må
forvente, at spørgerne selv benytter input til videre
informationssøgning.

Hvad angår dit konkrete spørgsmål, ville en minimal søgeindsats på
www.php.net fra din side havde givet dig svaret samt eksempler her->
http://php.net/manual/en/mysqli.prepare.php - det forudsætter
selvfølgeligt, at du gider at scrolle siden et par gange førend, du får
besvaret dine spørgsmål.

--
Hilsen/Regards
Michael Rasmussen
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.


Søg
Reklame
Statistik
Spørgsmål : 177422
Tips : 31962
Nyheder : 719565
Indlæg : 6407884
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste