Gå til innhold

Hvordan forhindre mysql injection?


Anbefalte innlegg

Det er umulig å forhindre sql-injection i URLen. Dette skal forhindres i sql spørringen, der du escaper/filtrerer alle parametre skikkelig.

 

Man kan kjøre en spørring, rett fra URL'en ?

Nei du vil nok ha problemer med å sende en URL til SQL databasen. Som jeg sa, det er når du bygger spørringen du må sørge for å unngå sql-injections fra parametre. Om disse parametrene kommer fra en web klient, database, PHP variabler/configs eller andre tredjeparter.

 

Du bør ikke "hindre sql-injection" direkte på alle data fra $_GET/$_POST siden det ikke er sikkert alle data skal brukes i en sql spørring.

Du vil gjerne manipulere disse data før de brukes i en spørring, og da må de escapes/filtreres på nytt.

Endret av OIS
Lenke til kommentar
Videoannonse
Annonse
PS_CS4 får jeg spørre deg om du kjører sql setningene dine i GET parameter?

 

mysql injection brukes vanligvis til og få tilgang til et system som dem i utgangspunktet ikke skal ha tilgang til, altså fra et innloggnings skjema f.eks.

 

$value = mysql_real_escape_string($_GET['noe']);

mysql_query("$value");

Lenke til kommentar
Du tuller nå?

Du bruker ikke noe sånt for å kjøre spørringer?

 

vell, alt du trenger å vite er blitt skrevet.

Famen sitt eksempel fungerer helt fint

Kan fint brukes til å kjøre spørringer, det der. Men man MÅ naturligvis kjøre inputten gjennom en rekke tester, for å sikre seg at man ikke gjøre noe som kan gjøre skade.

Lenke til kommentar

altså, du bruker $_GET til å kjøre spørringer?

feks:

 

?sql="SELECT * FROM brukere WHERE nick = 'test'"

<?php

mysql_query($_GET['sql']);

?>

 

EDIT:

@m4rtin: Ja det er fulgt mulig, og hvis det blir parsa og sjekka bra nok så går det nok ganske problemfritt også, men hva er vitsen?

Endret av AlecTBM
Lenke til kommentar

PS_CS4: Å putte sql spørringen i selve URLen betyr at hvem som helst som åpner den siden kan endre den til ka som helst. Du gir også vekk informasjon om databaseoppbyggingen din.

Det er bedre å legge til parametre som definerer hvilken oppgave du vil ha utført. På PHP siden velger du sql spørringen og legger til parametre fra web klienten.

Lenke til kommentar

jeg spurte

PS_CS4 får jeg spørre deg om du kjører sql setningene dine i GET parameter?

 

Og jeg fikk til svar

$value = mysql_real_escape_string($_GET[\'noe\']);

mysql_query(\"$value\");

 

Og dette sier du nå

Det er da helt menigsløst og kjøre en query fra URl, og det har jeg alldri sagt jeg har gjort.

 

Så spurte AlecTBM

Du tuller nå?

Du bruker ikke noe sånt for å kjøre spørringer?

 

Og DA svarte du

Går det an, og bli så dum?!

 

Du gir oss ALDRI et konkret svar på om du virkelig kjørte SQL setninger fra GET parametere, vi har alle sett hvordan du koder og for min del, kunne jeg virkelig trudd på at du kjørte SQL setninger fra GET i url.

Endret av Famen
Lenke til kommentar

Hva med å svare skikkelig?

Hvis du vil ha hjelp og respekt så må du være høflig, og da er folk høflige tilbake.

Jeg vet at jeg har vært hard mot deg, og jeg husker selv hvordan det var å ikke forstå noe, den følelsen har man ofte når det gjelder programmering, men man leser og søker til man forstår.

 

Hvis du er så heldig at du får andre som er bedre til å hjelpe deg, og de sender deg linker osv. så leser du på linkene, og da mener jeg ikke skumlesing.

Det hjelper også at du leser feilmeldinger og tilbakemeldinger fra script selv, du lærer ingenting hvis bare patcher det til en annen som gir deg et svar på hva du skal gjøre.

 

Sånn for å si det, vi vil faktisk hjelpe deg, men da må du ta imot den hjelpen vi gir deg og ikke klage til du får ny.

Lenke til kommentar
jeg spurte
PS_CS4 får jeg spørre deg om du kjører sql setningene dine i GET parameter?

 

Og jeg fikk til svar

$value = mysql_real_escape_string($_GET[\'noe\']);

mysql_query(\"$value\");

 

Og dette sier du nå

Det er da helt menigsløst og kjøre en query fra URl, og det har jeg alldri sagt jeg har gjort.

 

Så spurte AlecTBM

Du tuller nå?

Du bruker ikke noe sånt for å kjøre spørringer?

 

Og DA svarte du

Går det an, og bli så dum?!

 

Du gir oss ALDRI et konkret svar på om du virkelig kjørte SQL setninger fra GET parametere, vi har alle sett hvordan du koder og for min del, kunne jeg virkelig trudd på at du kjørte SQL setninger fra GET i url.

 

 

Jeg skrev rett etterpå:

mysql_query("SELCT * FROM brukere WHERE nick = '$value'")

Lenke til kommentar

Hvis du mener at

$value

i

mysql_query("SELCT * FROM brukere WHERE nick = '$value'")

kommer fra

$value = mysql_real_escape_string($_GET['noe']);

 

ingenting

 

EDIT:

På grunn av en forespørsel så legger jeg ved et "eksempel" som viser hva som er "nok"

$value = mysql_real_escape_string($_GET['noe']);
mysql_query("SELCT * FROM brukere WHERE nick = '$value'")

 

Dette skulle være sikkert nok (hvis noen er i mot, si ifra, er litt trøtt akkurat nå)

Endret av AlecTBM
Lenke til kommentar

Å kjøre mysql_real_escape_string på verdien som skal settes skal sikkre mot sql injection, men håper da du validerer den litt mer. Som f.eks og sjekke om parameteret(i dette tilfellet) innholder noe som tilsvarer ett brukernavn. Uansett jeg linket til en quote smart funksjon i mitt forrige innlegg. Ville anbefalt deg å ta en titt på den.

 

Lykke til :)

Lenke til kommentar
  • 1 måned senere...

Brukerne bes holde seg til sak og ikke person. Personangrep tolereres ikke, og i grove tilfeller vil den aktuelle brukeren bli fratatt tilgangen til forumet. Hva brukere mener om hverandre er ikke tema for tråden, og det er direkte ødeleggende for diskusjonen.

 

Innlegg med personangrep er blitt fjernet eller redigert. Brukere oppfordres til å bennytte p_report.gif-funksjonen om man kommer over personfokuserte innlegg av negativ art, fremfor å kommentere det i tråden. På den måten kan moderator bedømme saken og vi unngår videre personkrangel.

 

(Dette innlegget skal ikke kommenters, da det blir ansett som off-topic. Reaksjon på moderering gjøres eventuelt på PM.)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...