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 <br> . 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.
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?
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.