Het is mij nu al meerde malen opgevallen dat de scripts die worden aangeboden beveiligingsissues hebben. Niet alleen XSS maar zelfs SQL injectie is mogelijk. Ik wou daarom met dit bericht mensen leren hoe ze deze veel voorkomende fouten kunnen voorkomen.
XSS
Ook wel cross site scripting genoemd. Dit ontstaat wanneer het mogelijk is om javascript te embedden op een website. Hetzij door POST- hetzij door GET-requests. Dit komt vaak voor bij zoek velden waar de zoek waarde wordt weergegeven op de website zelf bv.:
"U heeft gezocht op 'aap'. Dit leverde x aantal resultaten op."
Een kwaadwillende zou iemand een zoekrequest uit kunnen laten voeren waarmee hij de sessie van de persoon zou kunnen hijacken. Kort door de bocht betekent dit dat de aanvaller ingelogd is als het slachtoffer.
Om dit te verkomen is het belangrijk om de input waarden te filteren of te converteren naar veilige html waarden zo dat tekens als <> ‘ ” en \ worden omgezet naar < >etc etc. PHP heeft hier een specifiek commando voor namelijk: http://nl3.php.net/manual/en/functio...ecialchars.php
Gebruik:
Met de veronderstelling dat de website UTF-8 is anders eerst converteren naar UTF-8 door middel van:PHP Code:
htmlspecialchars($_POST[‘zoekwaarde’],ENT_QUOTES, 'UTF-8');
of htmlspecialchars voorzien van de juiste charset.PHP Code:
mb_convert_encoding($_POST[‘zoekwaarde’], 'UTF-8', mb_detect_encoding($_POST[‘zoekwaarde’]);
Zo simpel kan het zijn om XSS te voorkomen.
SQL Injectie
Net als XSS is SQL injectie een veel voorkomend probleem. SQL injectie is het injecteren van SQL statements; het manipuleren van queries. Veel mensen hebben dit niet door maar het is vaak mogelijk om binnen 20 seconden uit te vinden of een website lek is of niet. SQL injectie stelt de aanvaller in staat om de database uit te lezen. Hierbij kun je denken aan de inloggegevens. Sommige mensen komen nu met het excuus van ja maar de wachtwoorden in de database zijn gehashed. Hashing is niet veilig. Vaak zijn er genoeg MD5 (meest gebruikte hash voor wachtwoorden) databases te vinden met een X miljard aantal hashes waarin je zo de plaintext van een hash kan ophalen. Het tweede argument dat dan wordt aangedragen is: maak dan gebruik van een salt. (salt is een stukje text voor of na het wachtwoord plakken.) Het gevaar dat het wachtwoord door middel van online databases gekraakt wordt is hierdoor wel een stuk minder. Zorg dus iig voor een salt van het wachtwoord . Maargoed terug naar de sql injectie. SQL injectie ontstaat vaak wanneer mensen besluiten om een GET- of POST-request direct in de query te bouwen bv.:
SELECT `title`,`body` FROM `news` WHERE news_id = ”.$_GET[‘id’].”
Het gevaar hier is dat mensen nu volledige tabellen kunnen samenvoegen door middel van het ‘UNION’ SQL command bv. als we het volgende deel url hebben:
/news.php?id=12 en we maken daarvan:
/news.php?id=-1 UNION ALL SELECT `username`,`password` FROM users LIMIT 0,1
Dan krijgen we ipv het nieuws bericht de gebruikersnaam en wachtwoord van de eerste gebruiker.
Om dit te verhelpen is het essentieel om id’s te ‘escapen’ of naar integer te casten.
Het escapen geschiedt op de volgende manier:
SELECT `title`,`body` FROM `news` WHERE news_id = ”.mysql_real_escape_string($_GET[‘id’]).”
En het casten naar integer (beter vind ik, omdat het minder zwaar is als mysql_real_escape_string):
SELECT `title`,`body` FROM `news` WHERE news_id = ”. (int) $_GET[‘id’] .”
Bij het casten worden alleen de eerste nummers gebruikt en geen ’niet’ gegeven.
SQL injectie is gevaarlijk maar makkelijk te voorkomen. De bovenstaande injectie is een variant van een veel voorkomende injectie. Probeer het dus te voorkomen.
- Beveiligen van je PHP scripts
-
29-03-2010, 10:42 #1
- Berichten
- 21
- Lid sinds
- 15 Jaar
Beveiligen van je PHP scripts
-
In de schijnwerper
-
29-03-2010, 10:56 #2gast9400 Guest
Wat voegt dit extra toe aan alle andere tutorials die besteed worden aan beveiliging? Verder heb je echt wel meer dan hacktechnieken dan alleen XSS en SQL injection.
Zoals:
- Universal Cross site scripting
- Cross site scripting
- Cross site request forgery
- (Blind) SQL injection
- Remote File inclusion
- X-Forwarded-For spoofing
- xPath injection
- LDAP injection
-
29-03-2010, 11:14 #3
- Berichten
- 21
- Lid sinds
- 15 Jaar
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic