Kolla bara så att man inte kan göra img-taggar utan den avslutande > vilket brukar vara vanligt.
Säkrast är väl egentligen att förvandla < och > till motsvarande i html-kod. Fast du kanske hellre vill att dessa inlägg inte ska synas, utan raderas helt och hållet.
"Kolla bara så att man inte kan göra img-taggar utan den avslutande > vilket brukar vara vanligt."
Ja, det var problemet med den ursprungliga, men det går inte (iaf inte för mig) att få den att visa bilder på något sätt.
"Säkrast är väl egentligen att förvandla < och > till motsvarande i html-kod. Fast du kanske hellre vill att dessa inlägg inte ska synas, utan raderas helt och hållet."
Jo, det är det säkraste, men det blir inte så snyggt (men man ser å andra sidan när någon har försökt skriva html, vilket man kanske vill). Man kan välja (i scriptet) mellan dessa båda sätt att hantera html, och dessutom tillåta det om man vill.
Med ditt uttryck, som f.ö. kan förenklas till s/<[^>]*>?//g (prova, så tror jag nog du får exakt samma resultat som med ditt uttryck), får du ju effekten att om någon skriver ett inlägg med ett < i så försvinner ju hela inlägget efter detta < (om inte resten av texten innehåller ett > någonstans). Är kanske inte önskvärt alla gånger?
Den bästa metoden, enligt mig, är därför att göra som FlashX föreslår.
Den tar bort allt från < fram till radslut eller >, men rensar inte allt efter < (om inte den aktuella raden är den sista).
Jo, om det är ok med dig så visst (men det är ju fortfarande inte säkert att det är ett önskvärt beteende att bli av med allt mellan < och radslut - det finns ju tillfällen då man kan behöva skriva < utan att den ingår i en HTML-tag).
Kan skrivas enklare dock (du försöker t.ex. använda | innanför hakparanteserna, och om det är en OR-funktion du är ute efter så fungerar inte | som sådan där, och det behövs f.ö. inte då en sådan existerar automatiskt för alla tecken innanför [ och ]).
s/<.*?(>|\n|\z)//g;
Tror i.a.f. att detta uttryck gör samma sak som ditt - matchningen slutar vid >, vid radslut, eller vid strängslut (i de fall strängen inte innehåller vare sig > eller radslut).
Fast nu bör du nog kolla hur de olika webläsarna behandlar saker som < img src="foobar.gif"> eller <\nimg src="foobar.gif"> (som ju skulle släppas igenom).
I NN 4.7 för linux och i Lynx verkar du klara dig (har bara tillgång till dessa f.n.), men det skulle inte förvåna mig om t.ex. IE tolkade detta som en bildtag (den brukar ju släppa igenom det mesta).
Jo, rent säkerhetsmässigt kan du lika gärna skippa den första satsen. Att ha med den första är ju nu en rent estetisk fråga. :)
Men om vi skall vara EXTREMT petiga och paranoida så finns det, under vissa förutsättningar, möjligheter att gå runt detta också. Nämligen om webläsaren är inställd på att använda någon annan teckentabell än vi är vana vid, och där antingen < och > inte befinner sig på samma ställe eller där det finns alternativa sätt att skriva dessa tecken. Det senare gäller t.ex. UTF7 (Unicode). Så är det maximal säkerhet du är ute efter så räcker inte ens dessa uttryck (brukar i sådana fall rekommenderas att man bara tillåter ett antal "säkra" tecken, och filtrerar bort allt annat). ;)
Japp, det är i första hand en estetisk fråga men jag ville inte att det skulle gå ut över säkerheten. Däremot tror jag (tills vidare iaf) att jag nöjer mig med denna säkerhetsnivå, man ska ju inte gå till överdrift ;).
Tack för hjälpen :)
/Csson
262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849