Gå til innhold

Hvordan sikre et innlegg mot uønsket html


Anbefalte innlegg

Kanskje litt lang tittel men :hmm:

 

Det jeg lurer på er hvordan sikrer man seg best mot at en leser kan legge inn uønsket html i en kommentar til et blogg innlegg.

 

er strip_tags tingen?

 

Har noen et eksempel, gjerne forklare det til meg også. Helt greit å komme med ferdig forslag, men gjerne med forklaring :) Så lærer jeg noe :)

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+6132
Kanskje litt lang tittel men  :hmm:

 

Det jeg lurer på er hvordan sikrer man seg best mot at en leser kan legge inn uønsket html i en kommentar til et blogg innlegg.

 

er strip_tags tingen?

 

Har noen et eksempel, gjerne forklare det til meg også. Helt greit å komme med ferdig forslag, men gjerne med forklaring :) Så lærer jeg noe :)

5621780[/snapback]

 

Du bytter bare ut < og >.

 

<?
$msg = str_replace("<", "<", $msg);
$msg = str_replace(">", ">", $msg);
?>

Lenke til kommentar
Gjest Slettet+6132
Så det er ikke mulig å fjerne noe, men godta noe?

 

feks., vil jeg jo ønske at de kan legge inn <i> og <strong> men kanskje ikke <a>

5621919[/snapback]

 

Da kan du benytte deg av såkalt bbcode, slik som forumet har.

 

Du bytter da ut med <b> osv :)

Lenke til kommentar

function bbcode($string) {
$string = preg_replace("#[b](.*?)[/b]#mi", "<strong>$1</strong>", $string);
$string = preg_replace("#[i](.*?)[/i]#mi", "<em>$1</em>", $string);
$string = preg_replace("#[u](.*?)[/u]#mi", "<span class="underline">$1</span>", $string);
return $string;
}

Bare kjør en strip_tags FØR denne funksjonen så har du det i boks ;) Men husk å lage klassen "underline" i CSS-dokumentet ditt :)

Lenke til kommentar
function bbcode($string) {
$string = preg_replace("#[b](.*?)[/b]#mi", "<strong>$1</strong>", $string);
$string = preg_replace("#[i](.*?)[/i]#mi", "<em>$1</em>", $string);
$string = preg_replace("#[u](.*?)[/u]#mi", "<span class="underline">$1</span>", $string);
return $string;
}

Bare kjør en strip_tags FØR denne funksjonen så har du det i boks ;) Men husk å lage klassen "underline" i CSS-dokumentet ditt :)

5622106[/snapback]

 

Og der fikk jeg plutselig forklart veldig godt BBkode i teori :)

 

men lyst til å forklarer f.eks $string = preg_replace("#(.*?)#mi", "<strong>$1</strong>", $string); for meg? litt mer i detaljer så jeg forstår bedre alt den gjør? Hadde gjort meg glad, pleier å mase til jeg forstår det. hehe :)

Altså oppbygningen, som: #, skjønner jo at er det man skriver inn, og forstår at (.*?) og $1 har en relasjon :)

 

 

OT

lukter deilig pizza fra kjøknet som dama lager :)

/OT

 

EDIT: men jeg må jo sikre at ikke annen html blir kjørt!

EDIT2: fiksa edit over med å bruke strip_tags() riktig :)

Endret av Svendsen
Lenke til kommentar

Burde vel heller være sånn her:

 

function bbcode($string) {

$string = preg_replace("#\[b\](.*?)\[/b\]#mi", "<strong>$1</strong>", $string);

$string = preg_replace("#\[i\](.*?)\[/i\]#mi", "<em>$1</em>", $string);

$string = preg_replace("#\[u\](.*?)\[/u\]#mi", "<span class="underline">$1</span>", $string);

return $string;

}

Endret av Zic0
Lenke til kommentar
Burde vel heller være sånn her:

 

function bbcode($string) {

$string = preg_replace("#\[b\](.*?)\[/b\]#mi", "<strong>$1</strong>", $string);

$string = preg_replace("#\[i\](.*?)\[/i\]#mi", "<em>$1</em>", $string);

$string = preg_replace("#\[u\](.*?)\[/u\]#mi", "<span class="underline">$1</span>", $string);

return $string;

}

5623570[/snapback]

 

 

Hvorfor?

 

Spør fordi jeg ikke veit forskjellen på noen av de

Lenke til kommentar
Så det er ikke mulig å fjerne noe, men godta noe?

 

feks., vil jeg jo ønske at de kan legge inn <i> og <strong> men kanskje ikke <a>

5621919[/snapback]

 

strip_tags() har en andre parameter, som lar deg spesifisere hvilke tags som skal være tillatt. Liten vits å pese med BBCode om du uansett ønsker å bruke plain HTML i kommentarer. :)

Lenke til kommentar

det finnes en mye enklere måte å løse dette på:

striptags.php

 

<?php
$text = '<p>Test paragraph.</p><!-- Comment --> Other text';
echo strip_tags($text);
echo "\n";

// Allow <p>
echo strip_tags($text, '<p>');
?>

 

og blir sånn:

Test paragraph. Other text

<p>Test paragraph.</p> Other text

 

 

EDIT:wow... postet på samme minutt som Jorgis...

Endret av MC2
Lenke til kommentar

Jorgis og MC2: ER klar over det, når jeg endelig klarte å beherske strip_tags(). Ikke altid influensa og programmering går sammen, men noen ganger er det deilig å koble av :)

 

Ønkser å bruke BBkoder også, er så mange som har blitt vandt med det, og ikke ser likheten med html. Dessuten ser det jo litt bra ut da :)

 

Så ønsker fortsatt en forklaring men skal og sjekke de linkene som var nevnt der oppe :)

 

Tusen takk folkens

Lenke til kommentar

kan ta en titt på DENNE koden.

 

den burde ta seg av all bbkode bekymringen.

bruk htmlentities() eller htmlspecialchars() om du vil vise < og > og andre ulovlige tegn, men ikke la dem kjøres istedenfor å fjærne dem, hva om du vil gi et htmleksempel?

 

Her er det selvfølgelig rom for å legge til en

 tag osv.. bare å legge til i både $patterns og $replacements det 
Lenke til kommentar

Nei Zic0, test heller funksjonen før du sier noe..

 

på grunn av at dette er laget i et array med " " runt, så kun en \ vil escape [ ut av lagringen til array, mens \\ sier escaper føsrt \ fra array statementen så neste \ kan escape [

 

"quote_parm" => "#\\

(.*?)\\[/quote\\]#si",

 

her brukes \ til escaping av " inne i regexen, mens \\ brukes som en del av regexen da første \ blir ignorert grunnet bruken av array()

Endret av NH
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...