Php Veiligheid

Uit Byte Docs

PHP scripts schrijven lijkt makkelijk, maar veel scripts blijken zwakheden te hebben qua beveiliging. We hebben hier een paar aanwijzingen verzameld om uw PHP scripts veiliger te maken.

Inhoud

XSS aanvallen

Als u bijvoorbeeld een forum of gastenboek hebt, is uw website misschien kwetsbaar voor XSS aanvallen. U zou de berichten op uw forum in ieder geval moeten quoten met de functie htmlspecialchars. Vaak is het mogelijk de invoer van gebruikers te controleren met een reguliere expressie. Als gebruikers bijvoorbeeld een url kunnen opgeven, kunt u die vergelijken met

if (!preg_match("/^(http|ftp|https)://[-A-Za-z0-9._/]+$", $url)) {
 die("ongeldige url");
}

Zie ook het artikel Validating input.

SQL injectie

Het forum is ook kwetsbaar voor SQL injectie. Als de inloggegevens van bezoekers worden gecontroleerd met

$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";
mysql_query($query);

zou een bezoeker als password "' OR ='" kunnen ingeven. Ook hier heeft PHP een oplossing voor: u kunt de invoer quoten met addslashes of mysql_real_escape_string. Of u kunt prepared statements gebruiken met de mysqli of de PDO Mysql extensies. Zie ook PHP SQL Injection voor meer informatie hierover.

Als de magic_quotes_gpc instelling aan staat, is het in principe niet nodig om addslashes() te gebruiken - dan zou er twee keer gequote worden. Het is in principe netter om magic_quotes_gpc uit te zetten en zelf de invoer te quoten.

Mail header injectie

Als u een contacformulier op uw website hebt, zou een bezoeker een Mail Header Injectie kunnen uitvoeren om hiermee spam te versturen. Dit is te verhinderen door te controleren of er in door de bezoeker gegeven velden ongeldige tekens voorkomen.

Tips

  • De Register_Globals instelling staat standaard uit. Het is sterk aan te raden deze uit te laten staan.
  • Denk ook na over uw include bestanden. Als in index.php bijvoorbeeld
include("db.inc");

staat, en in db.inc staat uw database wachtwoord, kan een bezoeker die http://uwdomein.nl/db.inc opvraagt, uw database wachtwoord zien.

  • Als u het include bestand db.php noemt, is het ook door een bezoeker op te vragen en wordt het als php code uitgevoerd. U kunt include bestanden het beste buiten de document root opslaan.
  • Als u bezoekers de mogelijkheid wilt geven bestanden te uploaden, controleer dan de extensie van die bestanden. Als ze bijvoorbeeld afbeeldingen moeten kunnen uploaden, controleer dan of het een .gif, .jpg of .png bestand is en geen .php bestand.
  • Zelfs als u de extensies van uploads controleert, kan een upload mogelijkheid nog zwakke plekken hebben. Zie ook http://www.webcheatsheet.com/PHP/file_upload.php voor een overzicht van hoe uw site mogelijk nog te hacken is. De enige echt veilige oplossing is om upload van bestanden niet toe te staan.
  • Code als
include("foo/$bar");

is zeer onveilig. U kunt beter geen variabelen in argumenten aan include gebruiken.

  • Gebruik liever geen include als u ook readfile kunt gebruiken

Links

De huidige waardering is: 66/100 (1 stemmen)
 You need to enable JavaScript to vote
  • Deze pagina is het laatst bewerkt op 29 mrt 2012 om 15:50.
  • Deze pagina is 707 keer bekeken.

We proberen de kwaliteit van onze kennisbank voortdurend te verbeteren.
Geef de informatie op deze pagina een waardering met de slider hierboven.