Sanitize function vraag

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marthijn Buijs

Marthijn Buijs

03/08/2015 14:03:17
Quote Anchor link
Beste forummers,

Ik zit weer met een vraag, of weer een idee die gekeurd moet worden.

Zou dit de goede manier zijn van 'sanitize', illegale karakters (bv. ▀) worden verwijderd en met htmlentities worden karakters zoals met: 'ý' genegeerd omdat ze 'html symbool' geworden zijn, netzoals html codes.

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 sanitize($text = null) {

    $text = htmlentities($text);
    $text = filter_var($text, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_HIGH);

    return $text;

}


?>


Zo zou het toch correct moeten zijn, of hebben jullie nog tips?
 
PHP hulp

PHP hulp

28/03/2024 11:05:31
 
Thomas van den Heuvel

Thomas van den Heuvel

03/08/2015 20:13:22
Quote Anchor link
Zoals op een ander forum ergens werd aangehaald: een discussie over dit soort aangelegenheden is zinloos zonder aanduiding van een character encoding.

De vragen zijn:
- waarom zouden die karakters verboden moeten zijn?
- over welke context hebben we het?

Het wordt pas "gevaarlijk" als bepaalde karakters een bepaalde betekenis hebben binnen een bepaalde context zodat hier ongein mee uitgehaald kan worden.

Ik vind het gebruik van dit soort functies "gevaarlijk" omdat ze als een soort van bestrijdingsmiddel worden gehanteerd: spuit de hele bus DDT er maar overheen en het ongedierte/onkruid zal na afloop wel dood zijn...

In het bovenstaande combineer je filtering en escaping ook volgens mij, en dat dient niet helemaal dezelfde doelen.

filtering is bedoeld voor het controleren op een bepaalde vorm: is iets numeriek, is iets een postcode, is iets een geldig e-mailadres of whatever, oftewel het doet aan een soort patroonherkenning. Voldoet het aan het patroon: ok, zoniet: niet ok.

escaping is bedoeld om bepaalde karakters binnen een bepaalde context te ontdoen van een speciale betekenis daarbinnen, bijvoorbeeld <, >, & (en eventueel quotes) in HTML.

escaping is altijd gebonden aan en werkt alleen binnen een zekere character encoding. Daarom is het belangrijk dat je deze ook altijd (bij voorkeur expliciet) definieert. Denk bijvoorbeeld aan de character encoding aanduidingen in de functie htmlspecialchars() (in het gebruik vaak handiger dan htmlentities()) en de _set_charset() functies/methoden voor bij het maken van een database-connectie (DIT HEEFT OOK IMPLICATIES VOOR DE OPSLAG VAN DE DATA OF VERTALINGEN VAN DE DATA TUSSEN VERSCHILLENDE ENCODERINGEN ALS JE DEZE NIET/VERKEERD INSTELT, DEZE PROBLEMEN KOMEN VAAK PAS HEEL LAAT NAAR BOVEN).

Voor escaping binnen html, gebruik zoiets (aanname: je maakt gebruik van UTF-8):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
function escape($in) {
    return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}

?>

Hierbij is het natuurlijk wel verdomd belangrijk dat:
- je document ook geserveerd/geinterpreteerd wordt als UTF-8, gebruik hiervoor een meta-tag of header()
- je alle output die je niet als HTML wilt weergeven zo escaped, HET MAAKT NIET UIT WAT DIT VERDER IS
- je overal correcte HTML gebruikt, gebruik altijd "dubbele quotes" om attribuutwaarden
- er ook nog andere contexten actief kunnen zijn binnen HTML die net iets andere regels volgen:
* javascript
* (querystring parameters van) URLs

Filtering doe je doorgaans bij de verwerking van invoer. Als je een getal verwacht, CONTROLEER HIER DAN OP EN DOE ANDERS NIETS (of geef een foutmelding).

Tis gewoon (weer) een (correcte) toepassing van het credo: filter input, escape output.
Gewijzigd op 03/08/2015 20:40:17 door Thomas van den Heuvel
 



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.