Php & Sql sikkerhed

Tags:    php mysql sql

<< < 12 > >>
Hej alle :)

Jeg vil gerne spørge jer hvordan jeg kan sikre min kode og sql database..
Hvad kan jeg gøre?





16 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 29 karma
Sorter efter stemmer Sorter efter dato
Først og fremmest er der flere forskellige måder du kan sikre dine sager på, jeg vil dog vove den påstand at har du styr på følgende, kommer du langt:

* Validering
* Prepared Statements
* Hashed Passwords med salt i db
* Brug "communitiet"

Validering
Du bør kontrollere at al input du får fra brugeren er af den type du regner med. Det betyder at du tjekker om den email brugeren har tastet ind i login-formularen, vitterligt også er en valid email.

Hashed Passwords med salt i db
Når du har med bruger-login og registrering at gøre, så sørg for at gemme en hashed værdi af brugerens password i databasen, krypteret med et salt der også er gemt i databasen. Når brugeren logger ind køres login-passwordet igennem den samme kryptering og de to hash-værdier sammenlignes.

Prepared Statements
Det du mest skal bekymre dig om, når det gælder database sikkerhed, er sql injections. Der er flere forskellige måder at løse dette på, for eksempel kunne god validering være en løsning, en anden løsning kunne også være at benytte PDO. PDO står for PHP Data Objects, og er en måde at kommunikere med din database på (forsimplet forklaring). Det der gør PDO godt er at det er nemt at bruge prepared statements, og en af bonusserne ved prepared statements er at PDO automatisk sikrer dem mod sql injections.

Brug "communitiet"
Søg på sider som udvikleren.dk, eksperten.dk, stackoverflow.com, etc., når du er i tvivl om din kode er sikker, der vil helt sikkert være nogle der kan hjælpe og give råd. Måske det mest vigtige redskab i kampen for en sikker applikation.

EDIT: En anden stor sikkerhedstrussel er selvfølgelig udvikleren selv,kod derfor efter en standard og følg best practices.



Indlæg senest redigeret d. 16.12.2011 19:17 af Bruger #7688
Lars har beskrevet mange gode pointer, men at prepared statements automatisk sikrer mod SQL injection er at tage munden lidt for fuld for det er kun KORREKT brug af prepared statements, som gør dette.
Man kan som udvikler stadig gøre noget forkert, som f.eks.:

Fold kodeboks ind/udKode 


Nu er der så også andre ting end databasen, man skal være opmærksom på når det gælder sikkerhed. For mange til at man rigtig kan nævne dem her, men tag et kig på www.owasp.org, det vil være en rigtig god start.



Fold kodeboks ind/udPHP kode 


Bare som eksempel.



Så skal du ud i noget Regular Expression.
Et eksempel kunne være:

Fold kodeboks ind/udPHP kode 


Eksemplet er ikke testet :)



Indlæg senest redigeret d. 17.12.2011 22:28 af Bruger #16025
Hej igen :)

Kan i give et eksempel på hvordan man kan sikre sig imod sql injections?



Jamen det vil sige at $salt1 & $salt2 er to ord der er i databasen også, eller hvad? :)



Nej, det er ikke to ord der er i databasen, men to ord der er på vej i databasen.



Altså når jeg poster noget så bruger jeg:
Fold kodeboks ind/udPHP kode 


Når jeg henter noget ud af mysql bruger jeg;
Fold kodeboks ind/udPHP kode 


Jeg har javascript validering som sikre sig for at der bliver skrevet i felterne og tjekker om det er email i email feltet.

Er det nogle gode metoder eller hvad?
Og er der mere jeg skal sikre mig imod?



Du kan ikke sikre dig at du får de rigtige data kun ved brug af javascript validering. Javascript er en klient baseret, og kan slås fra.



Jaah okaay.

Men hvordan kan jeg sikre mig mod tegn. Altså hvis det kun må være abcdefghijklmnopqrstuvwqyzæøå1234567890.,'!^/*-+? der kan skrives i feltet?

Og hvordan kan man sikre sig for at man ikke kan lave om i url'en, altså fx localhost/index.php?id=23 så man ikke skrive DROP TABLE id, eller sådan?



<< < 12 > >>
t