hoe moet het wel?

Hier 2 voorbeelden van GOEDE filters, de eerste is een filter waarbij de gebruiker html in mag voeren, maar.. alleen DIE html, die ik goedkeur..
en, misschien nog wel belangrijker, als ik iets filter (weghaal), zorg er dan altijd voor dat je er een lusje omheen zet, om te kijken of er niet, zoals in voorbeeld 1, na het filteren een goede tag is ontstaan.
Ook filteren deze scripts op een relatief nieuwe hack, waar Rsnake mij attent op heeft gemaakt, namelijk het gebruik van variable width characters.

http://applesoup.googlepages.com/bypass_filter.txt

hier staat hoe het precies werkt, voor mensen die geinteresseerd zijn, en nogal wat technische kennis hebben;)
het enige wat je hoeft te doen om je hiertegen te beschermen, is ervoor zorgen dat mensen geen ' of " rechtstreeks op een pagina kunnen plaatsen..

filter 1)
laat bepaalde html tags toe, en filtert de rest.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
function goedfilter1($text){
    $text = stripslashes($text);
    
    //transformeert eerst de "goede" tags naar hun bb versie, zodat ze door het strip_tags filter niet aangetast worden.
    $text = preg_replace("(<img src=\"([a-z0-9_\-\.\/:]+?)\"></img>)", "[img]$1[/img]", $text);
    $text = preg_replace("(<b>(.+?)</b>)", "[b]$1[/b]", $text);
    
    $text = strip_tags($text);
    $text = htmlentities($text, ENT_QUOTES);
    $text = preg_replace('(\[img\]http://([a-z0-9_\-\.\/:]+?)\[/(?:img)?\])', '<img src="http://$1">', $text);
    $text = preg_replace('(\[img\]([a-z0-9_\-\.\/:]+?)\[/(?:img)?\])', '<img src="http://$1">', $text);
    $text = preg_replace('(\[b\](.+?)\[/b\])', '<b>$1</b>', $text);
    return $text;
}

?>

Ik ben het met je eens als je zegt dat dit een omslachtige manier is, maar, hij filtert wel ALLES, er is geen enkele manier om hier omheen te komen.. als je je character encoding niet op us-ascii zet..;)

filter 2)
UBB filter, wat (voor zover ik weet), alle xss filterd.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
function bb($text, $img = "true"){
$text = stripslashes($text);
$text = strip_tags($text);
$text = htmlentities($text, ENT_QUOTES);
$text = nl2br($text);
$text = preg_replace('(\[b\](.+?)\[/b\])', '<strong>$1</strong>', $text);
$text = preg_replace('(\[img\]http://([a-z0-9_\-\.\/:]+?)\[/(?:img)?\])', '<img src="http://$1">', $text);
$text = preg_replace('(\[img\]([a-z0-9_\-\.\/:]+?)\[/(?:img)?\])', '<img src="http://$1">', $text);
}

return $text;
}
?>




Ik hoop dat jullie hier wat aan hebben, als je nog vragen hebt, of wil weten of jouw filter veilig is, stuur me gerust een berichtje!


~huib

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Waarom is xss zo schadelijk?
  3. Voorbeelden van foute filters
  4. hoe moet het wel?

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.