wiki.phpfreakz.nl
Aanmelden Artikel Overleg Bewerk Geschiedenis Go to the site toolbox

MagicQuotes

--Berry 13 jun 2008 12:59 (CEST)

Inhoud

Magic Quotes

magic_quotes_gpc is een instelling van PHP die er voor zorgt dat bepaalde gegevens bevinden "automagisch" worden escaped door een \ (slash) voor iedere ' (quote) en " (dubbele quote) te zetten. In een standaard installatie staat dit aan.

Er zijn meerdere versies van magic_quotes beschikbaar, te weten:

  • magic_quotes_gpc

escapet alle gegevens die zich in de $_GET, $_POST en $_COOKIE superglobals bevinden.

  • magic_quotes_runtime

escapet vrijwel alle data die PHP in of uit gaat, dus ook data van bestanden en databases.

  • magic_quotes_sybase

verandert de vorm van escapen voor de enkele quote van een backslash naar een twee enkele quote. In sommige databases is het gebruikelijk om enkele quotes te escapen door hem te verdubbelen zodat er twee enkele quotes komen te staan.

Waarom wel gebruiken?

  • magic_quotes_gpc is origineel in PHP gebracht om SQL injections tegen te gaan. Doordat iedere quote wordt ge-escaped, is het immers lastiger om een quote te injecteren in een query.

Waarom niet gebruiken?

  • Quotes zijn niet het enige wat gevaarlijk kan zijn en magic_quotes laat de rest ongemoeid.
  • Het klinkt misschien goed om een beetje veiliger te zijn, maar als je code op ieder platform moet gaan draaien, of na iedere update van PHP, mag je er *nooit* van uit gaan dat magic_quotes_gpc aan staat. Daardoor moet je alsnog iedere waarde die je gaat gebruiken escapen.
  • Niet alle waarden zijn er om in een database te stoppen, dus moet je data voor andere doeleinden door stripslashes() halen, om het effect ongedaan te maken, bijvoorbeeld als je een variabele met html wilt weergeven.
  • Magic_quotes_gpc in wordt php 6 verwijderd. Het zal nog even duren voordat je in php 6 gaat werken, maar het kan nooit kwaad om voorbereid te zijn op de toekomst.
  • Het is een schijnveiligheid; SQL injections kunnen evenzogoed worden uitgevoerd als je de input met magic_quotes hebt escaped. Gebruik liever de functionaliteit die de database driver in php heeft (bijv. pg_escape_string( ) of mysql_real_escape_string( )), of een prepared statement.

In PostgreSQL heb je de excellente functie pg_query_params() die al het benodigde escapen automatisch voor je doet.

  • niet alle databases gebruiken dezelfde manier van escapen: bijvoorbeeld in Oracle kun je een ' escapen door hem te verdubbelen tot ' '. Je hebt dan niets aan de \, en je zult hem dan ook moeten verwijderen.

Uitschakelen

Zoals je kunt zien wegen de voordelen vaak niet op tegen de nadelen. Het is dan ook gebruikelijk dat webhosts de instelling gewoon uitzetten. Mocht dat niet het geval zijn, of heb je je eigen webserver, dan zijn er twee aantal manieren om magic_quotes_gpc uit te zetten:

  • Zet magic_quotes_gpc = 0 in je php.ini als je je eigen server hebt.
  • Plaats "php_value magic_quotes_gpc Off" in een .htaccess bestand.

Ongedaan maken

Als je niet weet op welke server je script gaat draaien, kan je het volgende script gebruiken om de werking van magic_quotes_gpc ongedaan te maken:

  1. /**
  2. * Verkregen van http://nl3.php.net/manual/en/security.magicquotes.disabling.php.
  3. **/
  4. if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
  5. function stripslashes_recursive( $array, $topLevel=true ) {
  6. $newArray = array();
  7. foreach($array as $key => $value) {
  8. if (!$topLevel) {
  9. $key = stripslashes($key);
  10. }
  11. if (is_array($value)) {
  12. $newArray[$key] = __FUNCTION__($value, false);
  13. }
  14. else {
  15. $newArray[$key] = stripslashes($value);
  16. }
  17. }
  18. return $newArray;
  19. }
  20. $_GET = stripslashes_recursive($_GET);
  21. $_POST = stripslashes_recursive($_POST);
  22. $_COOKIE = stripslashes_recursive($_COOKIE);
  23. $_REQUEST = stripslashes_recursive($_REQUEST);
  24. }

zie ook

Site Toolbox:

Persoonlijke hulpmiddelen
De laatste wijziging op deze pagina vond plaats op 18 jul 2010 20:49. - Deze pagina werd 3.814 maal bekeken. - Disclaimers - Over PFZWIKI