Goed XSS filter?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wijnand -

wijnand -

28/06/2010 10:30:15
Quote Anchor link
Hoi,
ik heb dit filter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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;
}

?>


gehaald van : http://www.phphulp.nl/php/tutorial/beveiliging/beveiliging-xss-versie-2/434/hoe-moet-het-wel/976/

maar stel dat ik deze nou zo aanpas:


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
17
18
<?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;
}

$_GET = bb($_GET);
$_POST = bb($_POST);
$_COOKIE = bb($_COOKIE);


?>

Zijn al mijn get post en cookie variabelen dan beveiligd? Of kan hij geen array controleren? En als dat niet kan, kan ik dan ook eerst de get uitvouwen tot alle waarden en dan de get er alsnog 1 voor 1 doorhalen?

Mvg,
Wijnand
 
PHP hulp

PHP hulp

21/11/2024 22:19:26
 
Niels K

Niels K

28/06/2010 10:39:19
Quote Anchor link
Dit is alleen voor het weergeven van bepaalde dingen.. Ik vind het een beetje overbodig. Wat ik zou doen is gewoon dit:

echo htmlspecialchars( $_POST['bla'], ENT_QUOTES );

Voor Query's moet je gebruik maken van mysql_real_escape_string.

Voor het afdwingen van bepaalde attributen, of het controleren daarop kan je kijken op php.net voor alle functies

Bv:

ctype_digit

Aan de linkerkant vind je alle ctype mogelijkheden.

Succes
Gewijzigd op 28/06/2010 10:42:11 door Niels K
 
Wijnand -

wijnand -

28/06/2010 10:46:18
Quote Anchor link
weet ik, maar als ik dit doe, is mijn hele script meteen beveiligd;) en anders moet ik eerst nog mijn hele script aanpassen.. Dat ga k op de lange termijn wel doen, maar eerst even snel deze beveiliging. Maar hij werkt dus wel?
 
- Mark -

- Mark -

28/06/2010 10:51:03
Quote Anchor link
Hij werkt niet met array's in elk geval.

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php

    function bb($text, $img = "true"){
    
    #| Kijken of " $text " een array is, Zoja dan lopen we ze allemaal af.
    
        if(is_array($text)){
        
        #| Alle waarden doorlopen.
        
            foreach($text as $key => $value){
            
            #| Waarde controleren.
            
                $text[$key] = bb($value);
                
            }

        
        
        #| Array met resultaten terug sturen.
        
            return $text;
        
        }

        else{
            
            // hier je controles.
            
        
        #| Resultaat terug geven.

        
            return $text;
            
        }
    }

    
?>
    
 
Niels K

Niels K

28/06/2010 10:55:17
Quote Anchor link
"weet ik, maar als ik dit doe, is mijn hele script meteen beveiligd;) "

Nee ik denk niet dat dit gaat werken,

Je zult alle $_POST, $_GET, $_SESSION, $_COOKIE variablen op moeten geven.
 
Johan Dam

Johan Dam

28/06/2010 11:21:56
Quote Anchor link
Je kan deze functie wel gebruiken (ook op je $_GET, $_POST, $_COOKIE)

het accepteerd gewoon arrays en heeft ook charset ondersteuning,

wel word er geen stripslashes gebruikt, welke in mijn ogen niet erg nodig is,

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function xss($str, $charset = "UTF-8"){
    
    if(is_array($str)){
        $array = array();
        foreach($str as $k => $s)
            $array[$k] = xss($s, $charset);
        
        return $array;
    }

    return htmlentities(strip_tags($str), ENT_QUOTES, $charset);
}

?>
 
Chris -

Chris -

28/06/2010 11:31:53
Quote Anchor link
Striptags is ook nutteloos, juist door htmlentities =)
 
Johan Dam

Johan Dam

28/06/2010 13:35:37
Quote Anchor link
htmlentities is voor meer dan alleen de < >, zeker in combinatie met de charset, ik ben het met je eens dat in veel gevallen strip_tags() genoeg zal zijn, maar voor de rest is er htmlentities,

had ergens een voorbeeldje liggen maar die kan ik zo niet vinden helaas..
 

28/06/2010 13:41:59
Quote Anchor link
Je kunt toch ook gewoon gebruik maken van array_walk_recursive...
 
Pim -

Pim -

28/06/2010 14:02:56
Quote Anchor link
Zo moet je niet beveiligen!

Beveilig data voor de manier hoe je ze gebruikt!
Voor in queries: mysql_real_escape_string()
Om weer te geven: htmlentities(), dus niet bij het opslaan
Voor id's, if(ctype_digit($str))
enz...

Gebruik dus geen htmlentities voor data die je nog gaat opslaan
 
Johan Dam

Johan Dam

28/06/2010 14:10:52
Quote Anchor link
als iets een integer moet zijn, dan hoef je niet op xss te controleren nee,

maar als iets een tekst is wel, al is het maar een naam, xss controleren + eventueel lengte en afhangend van de wensen spaties en andere rare tekens, overal waar tekst in voor komt zou ik zeker voor xss controleren + specifieke eisen, allebei dus,
 

28/06/2010 14:13:52
Quote Anchor link
Inderdaad, je hoeft alleen maar mysql_real_escape_string te gebruiken voor als de data de database in gaat (of natuurlijk typecasten of prepared statements gebruiken).
Pas als je de data ophaalt kan je die functie d'r over gooien.
Je controleert nu niet, je past de data aan, en dat wil je niet, je wilt zo origineel mogelijke data hebben.
 



Overzicht Reageren

 
 

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.