[TYPO3-UG Dutch] sqlinjection
W.S.M. Perquin [YniVerse]
perquin at yniverse.nl
Wed Oct 12 22:23:24 CEST 2011
Bedankt Jigal,
Die had ik net nodig. Via de get statement wordt geen getal verstuurd, maar
een woord. Dit zorgt voor het probleem. De getallen doe ik reeds met
int_val, dus dat ging prima. Maar die tekst is een lastige.
Dankzij jou t3lib_div::removeXSS($data)) is het probleem opgelost.
Top!
W-P
-----Oorspronkelijk bericht-----
Van: typo3-ug-dutch-bounces at lists.typo3.org
[mailto:typo3-ug-dutch-bounces at lists.typo3.org] Namens Jigal van Hemert
Verzonden: woensdag 12 oktober 2011 21:05
Aan: typo3-ug-dutch at lists.typo3.org
Onderwerp: Re: [TYPO3-UG Dutch] sqlinjection
Hoi,
On 12-10-2011 17:21, W.S.M. Perquin [YniVerse] wrote:
> Iemand enig idee hoe dat ding dat doet? Cq hoe ik dat ook kan blokken?
Hoe die hack-pogingen precies gaan hoef je niet eens te weten om te
kunnen voorkomen dat ze effect hebben.
Het belangrijkste is dat je argwanend (of paranoia) gaat worden over
*alle* data "van buiten". De term "van buiten" moet je erg ruim nemen,
data uit:
- URL parameters
- databases
- bestanden
- POST parameters
- externe bronnen
- gebruikersinvoer
- etc.
Kortom, alles wat je script niet zelf van de grond af aan heeft opgebouwd.
Als je dit soort data in een query wilt stoppen zijn er twee manieren om
het te beveiligen:
- het zijn gehele getallen: gebruik de PHP functie intval() om er een
integer van te maken
- anders: gebruik de TYPO3 functie $quotedVariable =
$GLOBALS['TYPO3_DB']->fullQuoteStr($variable, $tableName); Dit is een
functie die bij elke database werkt via de DBAL extensie.
Een aantal TYPO3 database functies zal zelf de data al escapen en
quoten. Dit kun je in de API documentatie nalezen.
Als je voor versie 4.5 of hoger ontwikkelt dan kan het de moeite waard
zijn om eens naar prepared statements te kijken [1]. Deze beveiligen de
data zelf en kunnen bovendien voor snelheidswinst zorgen op andere
database-systemen.
Uitvoer
-------
Ook aan de uitvoer van data moet aandacht besteed worden. Het grootste
probleem is dat er HTML code met onaardige bedoelingen in data is
terechtgekomen en dat deze zonder controle aan bezoekers wordt aangeboden.
Als je geen HTML in de data verwacht is het in feite genoeg om iets als
echo htmlspecialchars($data);
te doen.
Als je wel HTML wilt toestaan wordt het complexer. De functie
t3lib_div::removeXSS($data) neutraliseert potentieel gevaarlijke tags en
attributen. Dit gebeurt door er '<x>' in te voegen (een <script...> tag
verandert dan in <sc<x>ript> ). Om nog valide HTML uit te spugen zou je
iets kunnen gebruiken zoals:
if ($data === t3lib_div::removeXSS($data)) {
// geen XSS gevonden, dus waarschijnlijk 'veilig'
echo $data;
} else {
// verwijder veiligheidshalve alle tags
echo strip_tags($data);
}
(strip_tags() is niet perfect, maar het zal wel schone data opleveren)
[1]
http://buzz.typo3.org/teams/core/article/typo3-45-lts-prepared-queries-are-t
he-way-to-go/
--
Kind regards / met vriendelijke groet,
Jigal van Hemert.
_______________________________________________
TYPO3-UG-Dutch mailing list
TYPO3-UG-Dutch at lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-ug-dutch
More information about the TYPO3-UG-Dutch
mailing list