Avatar billede netslottet_com Nybegynder
12. december 2010 - 20:52 Der er 21 kommentarer og
2 løsninger

Fjern ' i alle GET input

Hej

Er det på nogen måder muligt at fjerne alle ' i GET input..

Jeg tænkte måske noget i stil med sådan her

$_GET = str_replace("'", "", $_GET);


Er der nogen som har en ide om man kan dette ?
Avatar billede majbom Novice
12. december 2010 - 20:57 #1
du kan løbe $_GET-arrayet igennem og gøre det ved alle på den måde...
Avatar billede netslottet_com Nybegynder
12. december 2010 - 20:59 #2
Hvordan gør du det ?

Og tak for hurtig svar ;-)
Avatar billede majbom Novice
12. december 2010 - 21:06 #3
foreach($_GET as $key){
  $key = str_replace("'", "", $key);
}
Avatar billede repox Seniormester
12. december 2010 - 21:06 #4
Kunne man om muligt blive informeret om formålet?
Avatar billede netslottet_com Nybegynder
12. december 2010 - 21:18 #5
Vi har været udsat for sql injection på $_GET

Fx. $_GET[username]

Og har derfor lavet den her kode

$_GET[username] = str_replace("'", "", $_GET[username]);

Osv. osv.

Men vi har rigtig mange variabler og det er derfor svært at været sikker på at man har fået dem alle med.

Jeg har lige teste

foreach($_GET as $key){
  $key = str_replace("'", "", $key);
}

Og den virker problemet er bare at den kalder alle variabler for $key
Avatar billede majbom Novice
12. december 2010 - 21:22 #6
hvis det er derfor vil jeg da foreslå enten prepared statements med mysqli, eller mysql_real_escape (eller hvad de nu hedder - bruger kun mysqli, så kan sq ikke huske de andre :s)
Avatar billede netslottet_com Nybegynder
12. december 2010 - 21:27 #7
Vi har før brugt den her

$_GET      = ( isset ( $_GET )    ) ? @array_map("mysql_real_escape_string", $_GET)      : '';

Men den tager det ikke ;-)
Avatar billede repox Seniormester
12. december 2010 - 21:30 #8
Jeg tænkte nok det var sådan noget... så er der bedre alternativer, som splazz nævner, som også sikrer jer bedre...
Så det var da godt vi fik det frem i lyset...
Avatar billede ksoren Nybegynder
12. december 2010 - 21:44 #9
husk at der skal være en åben dataforbindelse før mysql_real_escape_string kaldes
Avatar billede netslottet_com Nybegynder
12. december 2010 - 21:50 #10
MySQL dataforbindelse er åben inden vi bruger
$_GET      = ( isset ( $_GET )    ) ? @array_map("mysql_real_escape_string", $_GET)      : '';

Men den fjerner ikke '
Avatar billede apocs Nybegynder
12. december 2010 - 21:59 #11
connection();
foreach($_GET as $key => $value){
    $$key = mysql_real_escape_string($value);
}
disconnect();
Avatar billede netslottet_com Nybegynder
12. december 2010 - 22:09 #12
Jeg har fundet en løsning ;-)

I min løsning indgår dele af splazz kode derfor syns jeg han skulle ligge et svar ;-)

1000 tak for hjælpen også til jer andre...
Avatar billede apocs Nybegynder
12. december 2010 - 22:11 #13
#12: af sikkerhedsgrunde vil jeg anbefale dig at bruge mysql_real_escape_string(); i stedet for bare at fjerne apostrof ;)
Avatar billede repox Seniormester
12. december 2010 - 22:26 #14
#13
Det kom vi egentlig frem til for nogle indlæg siden?
Avatar billede apocs Nybegynder
12. december 2010 - 22:31 #15
#14
Det er jeg så udemærket klar over, men når netslottet_com skriver, at han bruger noget af splazz's kode, og det eksempel han kommer med, ikke g'r brug af mysql_real_escape_string(), ville jeg bare pointere det ;)
Avatar billede netslottet_com Nybegynder
12. december 2010 - 22:37 #16
Jeg ved ikke om det er fordi der er noget galt med den her php kode som vi bruger men den fjerner ihvertfald ikke '


$_GET      = ( isset ( $_GET )    ) ? @array_map("mysql_real_escape_string", $_GET)      : '';


Derfor skulle jeg bruge noget som kunne fjerne '
Avatar billede apocs Nybegynder
12. december 2010 - 22:42 #17
$_GET = (isset($_GET) ? @array_map('mysql_real_escape_string', $_GET) : '');
Avatar billede apocs Nybegynder
12. december 2010 - 22:47 #18
Erh, det er heller ikke meningen at den skal fjerne ' :) - Den sørger bare for, at du kan sætte den streng ind i databasen, uden at der skulle kunne opstå SQL injection :)
Avatar billede netslottet_com Nybegynder
12. december 2010 - 23:05 #19
#18

Er du sikker på at de ikke kan lave sql injection hvis jeg bruger den kode ?

Er det fordi at der stod " og ikke ' at det ikke virket ?
Avatar billede apocs Nybegynder
12. december 2010 - 23:16 #20
#19

"Note:

If this function is not used to escape data, the query is vulnerable to SQL Injection Attacks."

taget fra http://php.net/manual/en/function.mysql-real-escape-string.php
Avatar billede repox Seniormester
12. december 2010 - 23:16 #21
#19
Jeg vil anbefale dig at google lidt mere på konceptet bag SQL injection. Din oprindelig løsning er sådan set god nok, men så er det temmelig sikkert ikke der det reelle problem ligger.

SQL injection består af meget mere end problemer med single quotes.
Det bedste forsvar ville faktisk være at angribe problemerne der hvor de kan opstå efter den metode som nu er bedst tilgængelig.

Valider dine brugeres input i stedet for at lade rå GET eller POST variabler indgå i dine SQL forespørgsler.

mysql_real_escape_string() er ikke en bulletproof løsning - den kan meget, men der er andre ting som du skal være lige så opmærksom på.
Avatar billede netslottet_com Nybegynder
12. december 2010 - 23:59 #22
#21 Det har du fuldstændig ret i ;-)

Dem som ønsker point lægger bare et svar.

Og endnu en gang tak
Avatar billede majbom Novice
13. december 2010 - 09:26 #23
svar...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester