Avatar billede kongfjong Nybegynder
06. maj 2006 - 11:01 Der er 9 kommentarer og
1 løsning

htmlentities - før eller efter database?

Et ganske kort spørgsmål: Hvad er bedst, at bruge htmlentities() (eller htmlspecialchars() for den sags skyld), når man indsætter data i databasen, eller når man trækker det ud af databasen?
Avatar billede nielle Nybegynder
06. maj 2006 - 11:13 #1
Det afhænger hvad data skal bruges til.

Hvis det indgår i et CMS system, og du senere skal kunne redigere i de data der er lagt i databasen, bør du ikke htmlentities'ere data.

Hvis det er data som ikke efterfølgende skal kunne redigeres (f.eks. en gæstebog), bør du  htmlentities'ere data før at de lægges i databasen. På den måde sikre du at du ikke skal bruge  htmlentities() hver gang data skal vises; Du udtrækker bare data og viser dem som de er. Dette spare på ressourcerne i din webserver.
Avatar billede kongfjong Nybegynder
06. maj 2006 - 11:19 #2
Det er blot bruger-tilføjet data, f.eks. på forums, og andre formularer:) F.eks. i forummet er det jo meningen man skal kunne søge i gamle indlæg, så er det vel ikke optimalt hvis jeg har brugt htmlentities() når det bliver indsat i databasen?

Men jeg tænker allermest på sikkerheden, altså så man ikke som bruger kan smadre siden med html-tags osv, men er det da nok at bruge htmlspecialchars, og tjekke for get_magic_quotes_gpc, når man indsætter i db'en?
Avatar billede nielle Nybegynder
06. maj 2006 - 11:50 #3
"man skal kunne søge i gamle indlæg" > Dette kan klares ved at du også bruger htmlentities() på søgekriteriet. Det er klart at dette giver et lille ekstra overhead ved en søgning, men dette skal holdes op imod at siden nok skal vises flere gange uden at der også søges.

"Men jeg tænker allermest på sikkerheden" > Dette har ikke noget at gøre med *hvornår* du kalder htmlentities() - kun at du *gør* det på et eller andet tidspunkt i forløbet.

Mht. sikkerhed omkring indsættelse i databasen (SQL injection), har dette intet at gøre med htmlentities() som pr. default ikke encoder enkelt '-tegn. Dette kan man dog sætte den til vha. at give ENT_QUOTES som 2. argument:

http://dk2.php.net/htmlentities

Sikkerhed omkring indsættelse i databasen, bør dog generelt ikke blandes sammen med sikkerhed omkring at man får indlejret fjentligt html-kode på siden (f.eks. Cross Site Scripting); Det er to forskellige typer af angreb, og de bør adresseres hver for sig.
Avatar billede kongfjong Nybegynder
06. maj 2006 - 11:55 #4
Cross Site Scripting hvordan defineres det, og hvad kan man gøre for at undgå det?
Avatar billede kongfjong Nybegynder
06. maj 2006 - 11:56 #5
Og tak for svaret på det andet, så bruger jeg htmlentities bare én gang i forløbet injection/udtræk, samt tjekker for om magic_quotes_gpc er sat og hvis ikke derefter bruger addslashes(), så skulle den være i vinkel?
Avatar billede nielle Nybegynder
06. maj 2006 - 12:00 #6
Cross site scripting (XSS) er når hackertyper kan indlejre f.eks. jacascriptkode i en gæstebog - det modgås netop ved brug af htmlentities().

http://www.cgisecurity.com/articles/xss-faq.shtml
Avatar billede nielle Nybegynder
15. maj 2006 - 17:55 #7
Har du fået svaret dit spørgsmål?
Avatar billede nielle Nybegynder
01. juni 2006 - 22:10 #8
Hvad med lidt respons?
Avatar billede kongfjong Nybegynder
28. juni 2006 - 14:24 #9
Sorry, jeps har fået svar på mit spørgsmål så smid endeligt et svar:)
Avatar billede nielle Nybegynder
28. juni 2006 - 23:52 #10
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