Funktion der fjerne "farlig" kode

Tags:    php

User
Bruger #29 @ 16.10.02 19:01
hejsa alle.

Jeg leder efter noget kode, der kan fjerne "farlig" kode. Brugeren sender noget tekst til et php-script. Jeg vil undgå at teksten indeholder HTML og script, som jeg ikke har "givet lov til". Jeg tænker selv på noget regex her, men præcis hvad skal jeg "undgå" at få med for at sikre mig mod noget der kan ødelægge siden. Tror kun at det er de helt almindelige HTML-koder der skal benyttes (altså mindre end HTML 3.2 kompatibelt hvis i kan huske tilbage til det :D), som <b>, <img>,<table> m.v.

Mener jeg så en en core php funktion der gjorde noget tilsvarnede, men kan sq ik lige finde den igen. Ellers hvis i har nogle andre eksempler el. l. så bare skriv.

Mark



3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Den 16-10-02 20:46 skrev Soccoro følgende:
-----------------------------------------------------------------------------

$string = htmlspecialchars($string);
--
Soccoro
---------------------------------------------------------------------------

Har kigget lidt på den i manualen, men den er ikke helt hvad jeg skal bruge. Pointen er at brugeren tilføjer noget HTML, men kun noget af den må komme igennem. Der er altså noget HTML der er tilladt.


Hmmm, kun noget HTML, det kan lade sig gøre at lave et script der tillader det, så må det være noget med at lave et array der indeholder alle de tilladte html koder, konvetere dem til noget mærkeligt derefter kører resten igennem htmlentities/htmlspecialchars og så konvetere de "lovlige" tags tilbage. Jeg har ikke selv lige tid til at forsøge at lave sådan et script lige nu, men der har du da en løsning på hvordan det kunne lade sig gøre, kan da lige give dig lidt kode, men det med at "sortere" lovlige koder ud så man kan ændre dem må du selv lige finde ud af:

Fold kodeboks ind/udKode 


Der var skabelonen så mangler du bare alt det store arbejde. Bemærk venligst at attributer ikke kan benyttes så billeder må du nok lige klare på en lidt anden måde, det samme gælder links, selvom du lige kunne lave en funktion der laver url'er om til link (jeg har den liggende hvis du vil have den)

Mvh
Kaare



hejsa alle.

Jeg leder efter noget kode, der kan fjerne "farlig" kode. Brugeren sender noget tekst til et php-script. Jeg vil undgå at teksten indeholder HTML og script, som jeg ikke har "givet lov til". Jeg tænker selv på noget regex her, men præcis hvad skal jeg "undgå" at få med for at sikre mig mod noget der kan ødelægge siden. Tror kun at det er de helt almindelige HTML-koder der skal benyttes (altså mindre end HTML 3.2 kompatibelt hvis i kan huske tilbage til det :D), som , <img>,<table> m.v.

Mener jeg så en en core php funktion der gjorde noget tilsvarnede, men kan sq ik lige finde den igen. Ellers hvis i har nogle andre eksempler el. l. så bare skriv.

Mark


$string = htmlspecialchars($string);
--
Soccoro




User
Bruger #29 @ 17.10.02 12:27
Den 16-10-02 20:46 skrev Soccoro følgende:
-----------------------------------------------------------------------------

$string = htmlspecialchars($string);
--
Soccoro
---------------------------------------------------------------------------

Har kigget lidt på den i manualen, men den er ikke helt hvad jeg skal bruge. Pointen er at brugeren tilføjer noget HTML, men kun noget af den må komme igennem. Der er altså noget HTML der er tilladt.

Som jeg har skrevet tror jeg at en løsning med REGXP er det som jeg skal bruge, og det var egentlig også sådan noget kode jeg ledte efter (men den funktion og også htmlentities() kan jeg da bruge til andre ting).


btw, fandt den her kode i manualen (*host* eHTML *host* :P). Tror jeg bruger noget af den, men ellers hvis andre har nogle forslag, så kom endelig med dem. Jeg stopper ikke tråden foreløbig:

function flt_tags($text) {
$text = ereg_replace("r", "", $text);
$text = ereg_replace("n", "[br]", $text);
$text = str_replace("<", "<", $text);
$text = str_replace(">", ">", $text);
$text = str_replace("[br", "<br", $text);
$text = str_replace("[p", "<p", $text);
$text = str_replace("[b", "<b", $text);
$text = str_replace("[/b", "</b", $text);
$text = str_replace("[i", "<i", $text);
$text = str_replace("[/i", "</i", $text);
$text = str_replace("[/u", "<u", $text);
$text = str_replace("[/u", "</u", $text);
$text = str_replace("[font color=", "<font color=", $text);
$text = str_replace("[font size=", "<font size=", $text);
$text = str_replace("[/font", "</font", $text);
$text = str_replace("[url=","<a target=_blank href=",$text);
$text = str_replace("[/url","</a",$text);
$text = str_replace("]",">",$text);
$text = stripslashes($text);
$text = trim($text);
return $text;
}

Hilsen Mark Gray



t