/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Funktion til keep_only_allowed_tags()
Fra : Lars Olesen


Dato : 03-05-04 15:40

Jeg har forsøgt at lave en funktion, der sletter attributter, som
jeg ikke vil tillade:

function strip_not_allowed_attr($text) {

// *******************************************
$allowed_attr=array("title", "href", "summary", "for", "type",
"id", "name", "method", "action", "cite");
// *******************************************

$search_before = array();
$replace_before = array();
$search_after = array();
$replace_after = array();
$i = 1;

foreach($allowed_attr AS $item) {
$search_before[] = ("'".$item."='");
$replace_before[] = "__".$i."__";
$search_after[] = ("'__".$i++."__'");
$replace_after[] = ($item."=");
}

$text = preg_replace($search_before, $replace_before, $text);
$stripAttrib = array("' ([a-zA-Z]*?)=\"(.*?)\"'i","'
([a-zA-Z]*?)=\'(.*?)\''i");
$text = stripslashes($text);
$text = preg_replace($stripAttrib, '', $text);
$text = preg_replace($search_after, $replace_after, $text);
$text = addslashes($text);

return trim($text);
}

Men den fejler, hvis jeg fx skriver <a onclick=ond_function()>Ond
funktion</a>; Er der nogen, der kan hjælpe med det, så den ikke
kan snydes?

Samtidig vil jeg gerne sikre mig, at linket inde i fx src og href
er regelrette links. Til det har jeg følgende tjek:

if(ereg("(http|ftp|https)://[-A-Za-z0-9._/]+", $var['url'])) { //
link er ok }

Jeg vil imidlertid gerne, hvis man på en eller anden måde kunne
kombinere den øverste funktion med det?

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Kasper Garnæs (03-05-2004)
Kommentar
Fra : Kasper Garnæs


Dato : 03-05-04 18:16

Lars Olesen <usenet@legestue.net> wrote:
> Jeg har forsøgt at lave en funktion, der sletter attributter, som
> jeg ikke vil tillade:
>
> [snip - masser af kode]

Er der en speciel grund til, at du ikke bare bruger strip_tags()
(http://dk2.php.net/strip_tags)?

--
Med venlig hilsen / Regards
Kasper Garnæs
http://kasper.garnaes.dk



Lars Olesen (03-05-2004)
Kommentar
Fra : Lars Olesen


Dato : 03-05-04 22:01

Kasper Garnæs wrote:

> Er der en speciel grund til, at du ikke bare bruger strip_tags()
> (http://dk2.php.net/strip_tags)?

Ja, for det er jo attributter jeg ikke vil tillade. Jeg vil gerne
tillade nogle tags!

--
Lars Olesen
Kan det gøres bedre? Struktur, navigation og brugervenlighed!
Betingelser findes på <http://www.fodboldenslegestue.dk>
Forslag afleveres inden 1. juli 2004

Kasper Garnæs (03-05-2004)
Kommentar
Fra : Kasper Garnæs


Dato : 03-05-04 23:47

Lars Olesen <lsolesen@hotmail.com> wrote:
> Kasper Garnæs wrote:
>
>> Er der en speciel grund til, at du ikke bare bruger strip_tags()
>> (http://dk2.php.net/strip_tags)?
>
> Ja, for det er jo attributter jeg ikke vil tillade. Jeg vil gerne
> tillade nogle tags!

Ok - hvis du ser på user contributed notes på http://dk2.php.net/strip_tags,
er der også eksempler på, hvordan man kan fjerne både uønskede attributter
og tags. Prøv fx. at se på kommentaren fra Tony Freeman.

--
Med venlig hilsen / Regards
Kasper Garnæs
http://kasper.garnaes.dk



Lars Olesen (04-05-2004)
Kommentar
Fra : Lars Olesen


Dato : 04-05-04 06:01

Kasper Garnæs wrote:

>>Ja, for det er jo attributter jeg ikke vil tillade. Jeg vil gerne
>>tillade nogle tags!
>
> Ok - hvis du ser på user contributed notes på http://dk2.php.net/strip_tags,
> er der også eksempler på, hvordan man kan fjerne både uønskede attributter
> og tags. Prøv fx. at se på kommentaren fra Tony Freeman.

Tony Freeman vil gerne fjerne nogle uønskede tags - jeg vil gerne
beholde nogle ønskede tags ud fra devicen. Det er bedre at tillade end
forbyde. Det kan kommentaren fra joris878 måske opfylde, men den
funktion virker ikke!

--
Lars Olesen
Kan det gøres bedre? Struktur, navigation og brugervenlighed!
Betingelser findes på <http://www.fodboldenslegestue.dk>
Forslag afleveres inden 1. juli 2004

Tommy Ipsen (04-05-2004)
Kommentar
Fra : Tommy Ipsen


Dato : 04-05-04 14:22

Lars Olesen wrote:

> Tony Freeman vil gerne fjerne nogle uønskede tags - jeg vil gerne
> beholde nogle ønskede tags ud fra devicen. Det er bedre at tillade end
> forbyde. Det kan kommentaren fra joris878 måske opfylde, men den
> funktion virker ikke!

string strip_tags ( string str [, string allowable_tags])

Du er lidt ambivalent mellem om du vil fjerne uønskede tags eller
beholde tilladte tags - hvis du vil beholde tilladte tags og har en
liste over disse, synes jeg bare du skal benytte strip_tags - du ved dét
med den dybe tallerken osv.

Mvh Tommy

Peter Brodersen (04-05-2004)
Kommentar
Fra : Peter Brodersen


Dato : 04-05-04 14:24

On 4 May 2004 15:22:12 +0200, Tommy Ipsen <tipsen@imada.sdu.dk> wrote:

>Du er lidt ambivalent mellem om du vil fjerne uønskede tags eller
>beholde tilladte tags - hvis du vil beholde tilladte tags og har en
>liste over disse, synes jeg bare du skal benytte strip_tags - du ved dét
>med den dybe tallerken osv.

Selvom man tillader tags, kan der stadigvæk være attributes, man ikke
ønsker. Fx muligheden for at folk kan smide style="..." ind hist og
her (eller onmouseover eller...) kan alligevel ødelægge en del.

--
- Peter Brodersen

Ugens sprogtip: "Der er et yndigt land" (og ikke "Det er et yndigt land")

Lars Olesen (04-05-2004)
Kommentar
Fra : Lars Olesen


Dato : 04-05-04 14:30

Peter Brodersen wrote:
> On 4 May 2004 15:22:12 +0200, Tommy Ipsen <tipsen@imada.sdu.dk> wrote:
>
>>Du er lidt ambivalent mellem om du vil fjerne uønskede tags eller
>>beholde tilladte tags - hvis du vil beholde tilladte tags og har en
>>liste over disse, synes jeg bare du skal benytte strip_tags - du ved dét
>>med den dybe tallerken osv.
>
> Selvom man tillader tags, kan der stadigvæk være attributes, man ikke
> ønsker. Fx muligheden for at folk kan smide style="..." ind hist og
> her (eller onmouseover eller...) kan alligevel ødelægge en del.

Netop, det er attributterne jeg snakker om. Og jeg vil gerne gøre det
helt klart, at logikken skal (og bør) vendes om. Der er ikke nogen
attributter jeg ikke ønsker. Til gengæld er der nogle attributter jeg
ønsker. At de attributter der ikke er tilladt skal slettes er en anden
historie!

--
Lars Olesen
Kan det gøres bedre? Struktur, navigation og brugervenlighed!
Betingelser findes på <http://www.fodboldenslegestue.dk>
Forslag afleveres inden 1. juli 2004

Tommy Ipsen (04-05-2004)
Kommentar
Fra : Tommy Ipsen


Dato : 04-05-04 14:38

Peter Brodersen wrote:

> Selvom man tillader tags, kan der stadigvæk være attributes, man ikke
> ønsker. Fx muligheden for at folk kan smide style="..." ind hist og
> her (eller onmouseover eller...) kan alligevel ødelægge en del.

Ups - min fejl - jeg havde læst lidt for hurtigt til at se, at det var
attributter der var tale om - sorry!

Kunne faktisk være meget smart med en udvidet strip_tags()...

[Blander mig bare udenom igen ]

Mvh Tommy

Kasper Garnæs (05-05-2004)
Kommentar
Fra : Kasper Garnæs


Dato : 05-05-04 08:57

Lars Olesen <lsolesen@hotmail.com> wrote:
> Kasper Garnæs wrote:
>
>>> Ja, for det er jo attributter jeg ikke vil tillade. Jeg vil gerne
>>> tillade nogle tags!
>>
>> Ok - hvis du ser på user contributed notes på
>> http://dk2.php.net/strip_tags, er der også eksempler på, hvordan man
>> kan fjerne både uønskede attributter og tags. Prøv fx. at se på
>> kommentaren fra Tony Freeman.
>
> Tony Freeman vil gerne fjerne nogle uønskede tags - jeg vil gerne
> beholde nogle ønskede tags ud fra devicen. Det er bedre at tillade end
> forbyde. Det kan kommentaren fra joris878 måske opfylde, men den
> funktion virker ikke!

OK - efter jeg har nosset lidt rundt i det, synes jeg også jeg måtte prøve
på at komme med et svar du måske kan bruge til noget :).

I min regular expression editor giver

"/((onclick|class|style)=((['"][^'"]*['"])|(\S*))\s)/is"

erstattet med

""

påført

"<a onclick="ond function()" class=evilclass href="good link"
name=goodlink>Ond funktion</a>"

"<a href="good link" name=goodlink>Ond funktion</a>"

Det er - såfremt jeg har forstået problemet rigtigt nu - burde være noget
nær det ønskede. Hvis du kan bruge det til noget, må du selv lige prøve at
wrappe det i PHP.


--
Med venlig hilsen / Regards
Kasper Garnæs
http://kasper.garnaes.dk



Lars Olesen (05-05-2004)
Kommentar
Fra : Lars Olesen


Dato : 05-05-04 09:09

Kasper Garnæs wrote:

> OK - efter jeg har nosset lidt rundt i det, synes jeg også jeg måtte prøve
> på at komme med et svar du måske kan bruge til noget :).

Hehe :)

[snip - forslag]

Det er stadig vendt forkert :) Du forbyder nogle tags i stedet for at
tillade nogen. Sostack gav et godt svar på problematikken her:

http://www.eksperten.dk/spm/495356

Jeg er efterhånden kommet frem til at for at validere urls, må jeg
extracte alle fra teksten og forkaste hele teksten, hvis der er et url
som ikke opfylder mit mønster. Så det vil jeg arbejde lidt videre med!

--
Lars Olesen
Kan det gøres bedre? Struktur, navigation og brugervenlighed!
Betingelser findes på <http://www.fodboldenslegestue.dk>
Forslag afleveres inden 1. juli 2004

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste