Voorbeelden van foute filters

Op deze pagina ga ik een paar filters laten zien, en uitleggen waarom je deze niet moet gebruiken, of in ieder geval wat moet aanpassen, voor dat je ze gebruikt.


filter 1)
filtert alle instanties van <script>.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
function filter1($p_sString){
    $return = $p_sString;
    $return = nl2br($return);
    $return = preg_replace('(<script>)isU', '', $return);
    return $return;
}

?>

ookal lijkt het alsof het nu onmogelijk is om een <script> tag te vormen, dit kan nog steeds!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo filter1('<scr<script>ipt>'); ?>



filter 2)
gebruikt htmlspecialchar, striptags, maar een gebrekkige bb implementatie.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
function filter2($text){
    $text = stripslashes($text);
    $text = htmlentities($text, ENT_QUOTES);
    $text = strip_tags($text);
    $text = nl2br($text);
    $text = preg_replace('(\[img\](.+?)\[/img\])', '<img src="$1">', $text);
    return $text;
}

?>

deze functie ziet er misschien op het eerste gezicht netjes uit, want alle illegale tekens worden geëntitied, en als er toch nog een <> doorslipt word ie verwijdert..

maar, zoals met ieder filter, de zwakste schakel bepaalt hoe sterk het filter is..
de image tag is ZEKER exploitbaar, want alle tekens zijn daar toegestaan!
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
[img]javascript:alert('XSS');[/img]



filter 3)
Een veelgemaakte fout, ik strip alle html, ik zorg ervoor dat er geen illegale tekens (zoals (, ), ', ", {, }) in de img tag mogen staan, maar ik vergeet 1 hele belangrijke! (#);
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function filter3($text){
    $text = stripslashes($text);
    $text = strip_tags($text);
    $text = nl2br($text);
    $text = preg_replace('(\[img\]([^\;\`\(\)\"\'\{\}]+?)\[/(?:img)?\])', '<img src="$1">', $text);
    return $text;
}

?>


Zoals je in mijn vorige tutorial al hebt kunnen lezen, is het heel goed mogelijk met alleen & en # en een nummer een image tag te voorzien van javascript.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
[img]&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116&#58&#97&#108&#101&#114&#116&#40&#39&#88&#83&#83&#39&#41&#59[/img]

« 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.