Avatar billede dustie Mester
27. december 2007 - 02:09 Der er 5 kommentarer og
1 løsning

Rens kode før database

Jeg har en form hvor en bruger kan submitte php kode. For at gøre det sikkert at putte det i en database hvad skal så køres på det?

Jeg har kigget lidt på htmlentities, strip_tags og mysql_real_escape_string. Men hvilke skal bruges og ikke mindst i hvilken rækkefølge?
Avatar billede nielle Nybegynder
27. december 2007 - 07:39 #1
Formålet med htmlentities() og strip_tags() er lidt modstridende:

htmlentities() gør at HTML tags blive neutraliseret ved at f.eks. <br> bliver omdannet til &lt;br&gt; .
strip_tags() gør at HTML tags neutraliseret ved at slette dem.

Det giver derfor ikke rigtig mening at bruge dem begge to på samme tid.

De bruges hvis det der bliver postet til databasen senere skal vises på hjemesiden igen; en fjentlig hacker bliver frataget muligheden for at smugle sit eget HTML kode ind på din side ved f.eks. at poste i din tagwall. Man kan vælge at kalde dem før man gemmer i databasen, eller man kan vælge at bruge dem efter at man har hentet data ud, men før, at man skriver det hentede ud på siden.

mysql_real_escape_string() bruges til at beskytte databasen imod SQL-injection angreb.

A) Brugen af en af de to første beskytter selve hjemmesiden, f.eks. imod cross-site scripting angreb.
B) Brugen af den tredje beskytter selve databasen i mod SQL-injection angreb.

MEN så skriver du at "... en bruger kan submitte php kode" og det lyder jo som om at du kører en eval() på det postede på et eller andet tidspunkt i forløbet. Dermed åbner du dig for en ny type angreb som ikke er dækket af de nævnte funktioner: eval-injection hvor folk sniger skadelig PHP kode ind med det de poster til din gæstebog/taggwall/blog/etc.

Svjv. er der ikke nogen nem måde at beskytte imod dette, og det kan egentligt slet ikke tilrådes at gøre det muligt at poste PHP kode med mindre at man har rigtigt meget styr på det der med sikkerheden!

Dertil kommer at man så skal revurdere om man overhovedet kan bruge htmlentities() og strip_tags() da disse så potentielt kan ødelægge resultatet af den PHP kode som folk har lov til at poste til din side.
Avatar billede dustie Mester
27. december 2007 - 16:46 #2
PHP koden skal ikke køres, bare vises på siden, så jeg har ingen eval(). Jeg er sådan set godt klar over hvad de forskellige funktioner gør, men jeg har ikke styr nok på dem til at vide hvad der skal gøres for at gøre det sikkert. Skal htmlentities fx. køres før real_escape_string eller efter?
Avatar billede dustie Mester
27. december 2007 - 16:47 #3
Nu jeg tænker over det så siger det vel sig selv..
Avatar billede nielle Nybegynder
27. december 2007 - 19:31 #4
Rækkefølgen er faktisk ligegyldig i dette tilfælde.

Men ejg ville delv bruge htmlentities() føest og så mysql_real_escape_string() dernæst.
Avatar billede dustie Mester
28. december 2007 - 13:35 #5
Det er også hvad jeg er nået frem til. Smid et svar så du kan få dine points :-)
Avatar billede nielle Nybegynder
28. december 2007 - 15:47 #6
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