Foreach post $ get

Tags:    php

Er dette sikkert?
Fold kodeboks ind/udPHP kode 


Har ikke lige testet koden endnu :)



9 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 14 karma
Sorter efter stemmer Sorter efter dato
Da du formentlig ikke benytter så frygteligt mange $_POST variabler, ville det formentlig være mere simpelt (og lettere at vedligeholde), et par linjer i toppen af dit script der *kun* sikrer de $_POST variabler du rent faktisk benytter.

BTW: At skrive $array['$key'], frem for $array[$key] er et betydeligt performance tab. Ved det første eksempel er PHP interpreteren først nød til at "opdage" at du giver den et variabelnavn pakket ind i en streng.



Det du gør der er på ingen måde sikkert, da de "slashes" som mysql_real_escape_string funktionen tilføjer til den usikre streng vil blive fjernet igen af stripslashes funktionen. I stedet burde du måske gøre noget á la:
Fold kodeboks ind/udPHP kode 


Dette sikrer dig også imod "double-slashes" hvis du har 'magic_quotes_gpc' direktivet sat til ON i din php.ini fil.

striptags har ikke noget med SQL injections at gøre, men derimod XSS og HTML embedding. Jeg mener at have læst at den ikke var helt så fantastisk som man skulle tro, men du kan vel bruge den alligevel.



@Anders, nej det er bare ikke særligt nyttigt. Du vil have en del variable der vil kræve yderligere validering og en anden del, som ikke kræver den validering du kører automatisk. Så det er ikke en effektiv udnyttelse af ressourcer.

@Jakob, PHP scanner slet ikke efter variable i single-quoted strings. :-) så det skulle være $_POST["$key"] eller $_POST[$key], eller $_POST["{$key}"]...

Du skal gennemgå de brugerinput du bruger. Det kan gøres på flere måder - blandt andet escaping osv. Men hvis du ved at du kun skal bruge et tal så er is_numeric() fin nok - fordi den ikke tillader andet end tal som input - derfor er escaping ikke nødvendigt. ctype_digit er nok i virkeligheden en smartere løsning end is_numeric - men lad nu det ligge.

Du kan også vælge at bruge regular expressions istedet for hvis der ikke er nogen indbyggede funktioner der passer til dine behov.



Indlæg senest redigeret d. 25.04.2012 14:55 af Bruger #17015
Ja-Nej-Måske...


Det giver i hvert fald ingen mening...



Du mener at du automatisk vil køre alle brugerinputs gennem en validator?

Jeg kan godt forstå hvorfor du har fået idéen men det er ikke en optimal måde at implementere det på.

For det første, så er det ikke altid den samme type input, du får - nogen gange er det tekst, andre gange er det tal...

Der er desværre ikke nogen nem løsning - du skal altid tjekke om det input du får er det du forventer.

For eksempel, hvis du har et simpelt billede galleri. Du henter billedet fra en database (SELECT stuff FROM billeder WHERE id = $_GET['id']) via billede.php?id=<input>

I det tilfælde skal du ikke nødvendigvis escape dit input - du skal hellere validere at du rent faktisk har med et tal at gøre. Her vil en if(is_numeric(<input>;)) { get stuff } else { error } være det rigtige at gøre. Og i det tilfælde vil din funktion ikke gøre noget for os.



Altså min side ser sådan ud at alt det man skriver, det består enten kun af tal eller bogstaver eller begge
Men altså handler det ikke bare om at lave nok if sætninger?

- Så ville jeg ikke bare kunne sikre om sql injections og tags?



Indlæg senest redigeret d. 25.04.2012 13:09 af Bruger #16838
Men ville det være usikkert at gøre det?
Sikrer bare dem alle sammen med:
Fold kodeboks ind/udPHP kode 




@Gustav: Tak, det var jeg ikke klar over - Længe siden jeg har rodet med PHP.



Hvad indenholder sikkerheds_funktioner() funktionen ?
Den skal nok med at at sige om det er sikkert eller ej.



t