Søger du en specifik kategori?

 



Oprettet tor. d. 12. februar 2009 kl. 19:26

sandbox
sandbox (50.345 point)
Guidens karaktér
1
2
3
4
5

Datasikkerhed i PHP

En kort gennemgang af hvad der sker, når PHP modtager data, hvorfor stripslashes og addslashes er nødvendige og hvordan man bruger dem bedst. Egentlig datavalidering bliver ikke behandlet i denne artikel.
Når du modtager data, sker følgende:

- PHP får oplysninger om felternes indhold og cookie-indhold fra webserveren.
- PHP kører måske addslashes() på brugerdata. [Se note 1]
- PHP putter data i variabler, der kan bruges af dit script.
** $_GET får data fra adressen (og formularer med method='get')
** $_POST får data fra formularer med method='post'
** $_COOKIE får data fra cookies.
** $_REQUEST får data fra de tre ovennævnte. [Se note 2]
** Måske bliver data også puttet i variable som f.eks. $navn [Se note 2 og 3]
- Dit script starter.

Forestil dig følgende login-situation:
  * Formularen havde to felter: navn og password
  * Der er IKKE kørt addslashes(), eller du HAR kørt stripslashes()
  * SELECT brugerid FROM tabel WHERE navn='$navn' and password='$password'
  * $navn="admin" og password="glup' OR '' = '" giver følgende:
    SELECT brugerid FROM tabel WHERE navn='admin' AND password='glup' OR '' = ''

Hvis du har en bruger, der hedder admin, er personen nu logget ind.

\ betyder bare: Næste tegn skal ikke opfattes normalt, men bare indsættes som det er. Den bruges også i PHP, hvis du vil bruge en " inde i en streng, hvor der er " uden om. Hvis du havde slashes i variablerne, ville MySQL have ignoreret \' så den ville have forsøgt at finde en bruger med passwordet glup' OR '' = ', da din query så havde set således ud:

SELECT brugerid FROM tabel WHERE navn='admin' AND password='glup\' OR \'\' = \''

Når du henter data ud fra tabellen igen, kan det også være, at der bliver kørt en automatisk addslashes på dem[Se note 4]. Den skal du kun fjerne med stripslashes, hvis du ikke vil putte indholdet i database igen. Jeg vil foreslå at du kun fjerner dem, lige når du udskriver data - dog før du eventuelt manipulerer output med striptags(), nl2br() eller lignende.

Her er to funktioner, som du kan bruge i stedet for addslashes() og stripslashes():

function my_addslashes($streng){
  return get_magic_quotes_gpc()?$streng:addslashes($streng);
}

function my_stripslashes($streng){
  return get_magic_quotes_runtime()?stripslashes($streng):$streng;
}


Fordelen ved at bruge disse funktioner istedet for bare at kalde addslashes eller stripslashes normalt er, at så virker dit script stadig hvis du skifter til et andet hotel med andre indstillinger, eller hvis dit hotel pludselig laver om på indstillingerne.

Noter:


1)
Dette kan ændres i php.ini. I dit script, kan du bruge get_magic_quotes_gpc() for at finde ud af om det er slået til, så du kan lave scriptet, så det virker både på servere med og uden automatisk addslashes().

2)
Hvis det skulle ske, at variable fra flere steder har samme navn, er det enten variables_order (i nyere udgave) eller gpc_order (i ældre udgaver), der bestemmer hvilke der kommer igennem.

3)
Hvis register_globals er slået til. Dette anbefales ikke, og den har som standard været slået fra i nyere PHP-versioner.

4) Tilsvarende til note 1, findes der funktionen get_magic_quotes_runtime() som kan fortælle dig om dette er aktiveret.

Hvis du har forslag til rettelser i artiklen, må du meget gerne skrive til mig. Jeg er brugeren ole på serveren sandbox.adsl.dk

Skrevet ons. d. 25. februar 2004 kl. 11:28| #1


Skrevet tor. d. 04. marts 2004 kl. 20:58| #2


Skrevet fre. d. 12. marts 2004 kl. 11:18| #3

hermandsen (39.813 point)
secoya.dk/
Ganske fin lille artikel, desværre ikke vildt dybtegående, men stadig god!! :)

Skrevet fre. d. 16. april 2004 kl. 08:16| #4

xyborx (22.940 point)
Lille simpel artikel, der dog har en meget vigtig pointe. Til mysql queries er det måske også værd at kigge på funktionen mysql_escape_string()

Skrevet tor. d. 20. oktober 2005 kl. 00:22| #5

stevenizzle (12.130 point)
fin artikel :D

Skriv en kommentar



Mest populære guides

Guidens karakter
!!!Karaktér: 3
14 stemmer
31/01 - 2011
Af: heinzdmx

Dropbox - gratis online lagerplads

Jeg vil i denne guide forklare lidt om hvad Dropbox er og også hvordan du får mest mulig plads på Dropbox. Dropbox er kort sagt en service hvor du har dine data lagt til backup på både nettet og din egen computer.
Guidens karakter
!!!Karaktér: 4
33 stemmer
02/02 - 2009
Af: jkrons

Dato- og tidsberegninger i Excel

En introduktion til simple beregninger med dato og tid i Excel. Opdateret med afsnit om beregning af tillæg.
Excel  |  Læs »
Guidens karakter
!!!Karaktér: 4
21 stemmer
06/11 - 2011
Af: fromsej

Sådan fjerner du virus og malware

Udviklingen går stærkt på "skidt"fronten, så vi har sammensat en ny og effektiv programpakke til fjernelse af det.
Virus  |  Læs »

Log ind

   

   



   




Tips & Tricks fra PC World

Teaser billede

Top 5: Virale YouTube-videoer fra Danmark

Lægger du mærke til de mere eller mindre skjulte reklamebudskaber, når du ser videoer på nettet? Vi har taget et kig på fem utrolige danske videoer, som er blevet virale hit.


Anmeldelser fra PC World

Teaser billede

Test: HTC One X er en fantastisk mobil

HTC leverer et gennemført comeback med One X, der er en Android-telefon med toptunede funktioner og en supersprød skærm. Der er dog også plads til forbedring.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan fotograferer du blomster

Det er forår, og blomsterne løber om kap for at springe ud. Her er en række gode tips til, hvordan du tager smukkere blomsterbilleder.


Nyheder fra Computerworld

Teaser billede

Fup-app til Android: Sådan stjæler den penge fra dig

Snedige hackere snyder Android-brugere gennem populær app.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger