Shellsec

Fuld version: hjælp til at php kode
Du ser lige nu en skrabet udgave af vores indhold. Se den fulde version med ordentlig formatering.
Sider: 1 2
(11-11-2013, 23:39)Morph3s Skrev: [ -> ]Vel en form for at validere den parameter. Selvom jeg ikke ville bruge den løsning, virker det som det eneste logiske.
Den vil jo smide en fejl så snart du prøver på SQL injection.

Så tror jeg ikke du kender PHP's conversion matrix godt nok. Den laver det mærkeligste rod nogensinde. Hvis man skal lave en fornuftig validering sørger man for at regexen /[^0-9]/ ikke matcher noget.
(11-11-2013, 23:43)Doctor Blue Skrev: [ -> ]Så tror jeg ikke du kender PHP's conversion matrix godt nok.

Kender intet til den :D


(11-11-2013, 23:43)Doctor Blue Skrev: [ -> ]Hvis man skal lave en fornuftig validering sørger man for at regexen /[^0-9]?/ ikke matcher noget.

Altså intval() ?
(11-11-2013, 23:45)Morph3s Skrev: [ -> ]Altså intval() ?

Nej. Intval evaluerer strengen som et heltal. Det vil sige at den ignorerer bogstaver og tegn og tager den første serie af tal og gemmer dem som en int (et heltal).
intval("asd2455ppfod4"); ville returnere 2455.
Ja, du ville undgå SQL injection, men hellere give brugeren en fejl end at give dem noget tilfældigt indhold (og i øvrigt bruge de funktioner der er lavet til at escape med).

Med min metode skal du tjekke inputtet og returnere en fejl. Det er det eneste rigtige når brugeren udemærket ved at der ikke er tale om gyldigt input.
if(preg_match("/^[0-9]/")){
die("Ugyldigt input");
}

EDIT: Alternativt er der funktionen is_numeric() som jeg ikke selv kendte til før jeg havde googlet lidt på sagen. Princippet er det samme :)
nu vil jeg gå i seng :)
- damen og jeg takker, og glæder os til at "lege" vidre imorgen :P

et link til dem som gerne vil se det live, mangler dog at lave en "hvis id ikke er i database lav skriv blah lbah"

http://dejligepatter.dk/beta/img.php?id=2&size=3


btw hun er sku helt vild, efter vi er begyndt at lave på "hendes" side :P
- det som planen er med side, er at lave en hot or not hvor man kan upload billeder (patter!)
(11-11-2013, 23:54)Doctor Blue Skrev: [ -> ]Nej. Intval evaluerer strengen som et heltal. Det vil sige at den ignorerer bogstaver og tegn og tager den første serie af tal og gemmer dem som en int (et heltal).
intval("asd2455ppfod4"); ville returnere 2455.
Ja, du ville undgå SQL injection, men hellere give brugeren en fejl end at give dem noget tilfældigt indhold (og i øvrigt bruge de funktioner der er lavet til at escape med).

Med min metode skal du tjekke inputtet og returnere en fejl. Det er det eneste rigtige når brugeren udemærket ved at der ikke er tale om gyldigt input.
if(preg_match("/^[0-9]/")){
die("Ugyldigt input");
}

EDIT: Alternativt er der funktionen is_numeric() som jeg ikke selv kendte til før jeg havde googlet lidt på sagen. Princippet er det samme :)

Oh, jeg troede faktisk at den blot validerede om det var en int. Misvisende navn! - Oh well. Altid godt at lære noget nyt ;)
(11-11-2013, 20:33)ailicis Skrev: [ -> ]har jo en or die(mysql_error()); som afslutter det :P
- koden er nu
Kode:
mysql_select_db("dejligepatter") or die(mysql_error());

Ah, ok. Så giver det mening. :)

(11-11-2013, 20:57)BlimBlamBlar Skrev: [ -> ]Du bør ikke have die(mysql_error()) i din kode...allerhøjst kun i udvikling/test.
Hvem ser den fejlbesked? Det gør den bruger, som får koden til at fejle...ikke dig.
Og fejlbeskeden fra mysql kan indeholde informationer om den forespørgsel, som fejlede og andet godt. Så ved fejl bør du skrive en log besked et sted, som du har adgang til, og skrive ud til brugeren at noget gik galt...ikke en masse detaljer.

Og ailicis, som skrevet her over, er det vigtigt, ikke at give brugeren unødig info. En rigtig go idé er, at gå php.ini igennem og sætte alt til "prod", så vil den nemlig ikke skrive sådanne ting ud til brugeren ved et uheld.
Kig den igennem, så giver det god mening. :) I hvert fald, når du gør den offentlig tilgængelig. :)
Seriously, guys. Mysql* er ikke understøttet i de nye versioner af PHP. Brug Mysqli eller PDO
Hvis du læste tråden DarkNigga så ville du se at det har DoctorBlue allerede skrevet ;)

Ontopic så kan du også anvende preparedstatements for højere sikkerhed :)
Sider: 1 2