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)
1
2
3
4
5
6
7
8
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;
}
?>
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!
filter 2)
gebruikt htmlspecialchar, striptags, maar een gebrekkige bb implementatie.
Code (php)
1
2
3
4
5
6
7
8
9
10
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;
}
?>
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!
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)
1
2
3
4
5
6
7
8
9
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;
}
?>
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)
1
[img]javascript:alert('XSS');[/img]
« vorige pagina | volgende pagina »