Avatar billede dustie Mester
06. december 2005 - 20:47 Der er 12 kommentarer og
1 løsning

Fjern skadelige ting før insert i db

Hej.
Jeg skal tage imod input fra en form og sætte det ind i en database, hvor efter det vises på hjemmesiden, så jeg skal have lavet en funktion der fjerner skadelige ting. Noget i stil med det her (er ikke testet):

function clean($zap){
    $zap = trim($zap);
    $zap = strip_tags($zap);
    $zap = htmlentities($zap, ENT_NOQUOTES);
    mysql_real_escape_string($zap);
    return $zap;
}

Nogle ideer til hvordan jeg kan gøre det bedre?
Avatar billede dustie Mester
06. december 2005 - 20:49 #1
Hov, der sneg sig vidst lige en fejl ind, men i kan nok se hvad jeg mener alligevel :)
Avatar billede jakobdo Ekspert
06. december 2005 - 20:51 #2
Jeg vil mene du er pænt sikret der! :o)
Avatar billede dustie Mester
07. december 2005 - 03:27 #3
Ja det vil jeg også selv, men jeg er ikke sikker på om det kan bruges i praksis.
For eksempel kan en jo forsøge at vise noget PHP. Vil det i så fald kunne læses i "den anden ende"?

Måske det er bedre sådan her:

function clean($zap){
    $zap = trim($zap);
    $zap = htmlentities($zap, ENT_NOQUOTES);
    $zap = strip_tags($zap);
    $zap = mysql_real_escape_string($zap);
    return $zap;
}

Bemærk den ændrede rækkefølge.
Eller er det overkill at bruge både strip_tags og htmlentities?
Jeg har ikke den mindste idé om hvor effektive de er.
Avatar billede jakobdo Ekspert
07. december 2005 - 09:04 #4
Jeg bruger personligt selv kun mysql_real_escape_string()
Avatar billede there-is-only-xul Nybegynder
07. december 2005 - 09:16 #5
addslashes() kan også bruges istedet for mysql_real_escape_string() (da sidstnævnte kræver at mysql virker.. dvs. dit system ville være ubrugeligt i et ikke-mysql-miljø)

det anbefales at du bruge strip_tags() og htmlentitie() ved OUTPUT istedet.
det er faktisk kun addslashes() som er nødvendig før DB insert.

(og så alm. validering på ALLE informationer , men det er jo genneralt procedure).
Avatar billede jakobdo Ekspert
07. december 2005 - 09:58 #6
mysql_real_escape_string()
Vil man beskytte noget som ikke skal i DB?
Avatar billede dustie Mester
07. december 2005 - 18:24 #7
Mit "system" kommer aldrig til at køre på andet end MySQL.

Du kan ikke sammenligne addslashes og mysql_real_escape_strings.
addslashes ændre kun på ' " \ og NUL hvorimod mysql_real_escape_string også gør det ved \x00, \n, \r og \x1a
Avatar billede jakobdo Ekspert
07. december 2005 - 19:00 #8
Hvis du laver din funktion til:
function clean($zap){
    $zap = trim($zap);
    $zap = strip_tags($zap);
    $zap = htmlentities($zap, ENT_NOQUOTES);
    $zap = mysql_real_escape_string($zap);
    return $zap;
}

Så vil du bare godt beskyttet!
bemærk jeg rykkede strip_tags() op over htmlentities()
Avatar billede dustie Mester
08. december 2005 - 13:09 #9
Men som jeg spurgte om før: Hvis strip_tags er øverst, så er det vel ikke muligt for en bruger at tilføje fx PHP kode uden det hele bliver fjernet?
Avatar billede jakobdo Ekspert
08. december 2005 - 13:20 #10
Det har du muligvis ret i! :o)
Avatar billede dustie Mester
09. december 2005 - 14:22 #11
Nå, det må jeg teste. Tak for hjælpen. Smider du et svar?
Avatar billede jakobdo Ekspert
09. december 2005 - 14:31 #12
Hvis du synes, så skidt da! :o)
Avatar billede jakobdo Ekspert
09. december 2005 - 17:24 #13
Takker for point!
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