[PHP] Magic Quotes - een 'must do' of 'no go'?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
Magic Quotes in PHP, en dan specifiek de magic_quotes_gpc directive.

De meningen van diverse mensen hierover lopen nogal uiteen. Waar de ene persoon zegt dat hij het geweldig vindt (link), raadt de ander met krachtige bewoording aan het uit te zetten (link). Ook op de Internationale PHP Conferentie in Amsterdam vorige week waren de speakers het hierover niet met elkaar eens.

Het grootste nadeel wat ik gehoord heb over het aanzetten is dat het fout kan gaan op een server waar het uit staat. Maar stel nou dat dit aspect niet meespeelt en ik zelf mijn configuratie bepaal.

Mijn vraag aan jullie: Wat zijn goede argumenten om de magic_quotes_gpc directive niet aan te zetten?

De reden achter vraag is het volgende. Vaak wordt als voorbeeld van code-injection in PHP het aanpassen van de MySQL Query gebruikt. Echter: in de standaard PHP config staat magic_quotes_gpc al aan, waardoor geen enkel standaard voorbeeld nog klopt. Het lijkt mij dat het dus niet meer nodig is mysql_escape_string oid te gebruiken als magic_quotes_gpc aanstaat..

[ Voor 9% gewijzigd door Burat op 13-05-2003 11:28 ]

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:16
Wat houden die 'magic quotes' precies in?
(Ik doe niet aan PHP, vandaar).

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
Als magic_quotes_gpc aanstaat, wordt alle data die uit een Cookie of een GET- of POST-request komt automatisch ge-escaped. Zie ook hier. In dit topic staat ook wel aardig uitgelegd hoe het werkt (lees ook de reacties!).

[ Voor 54% gewijzigd door Burat op 13-05-2003 10:58 ]

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


Acties:
  • 0 Henk 'm!

  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
Data die binnenkomt van Get/Post/Cookie kan 2 kanten op:
1) Geprint worden naar browser of file
2) GeInsert worden in database

Als magic_quotes_gpc aanstaat
1) htmlentities(strip_slashes($str))
2) $str

Als magic_quotes_gpc uitstaat
1) htmlentities($str)
2) mysql_escape_string($str)

Wat betreft de hoeveelheid werk en de vertroebeling van de code lijkt het beter om het aan te zetten. Tenslotte zet je vaker iets in de DB dan dat je het direct op het scherm zet..

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:16
Om dingen in een DB te zetten gebruik ik altijd stored procedures of queries met parameters ipv een query op te bouwen dmv strings te concateneren.

Daardoor hoef ik me dus geen zorgen te maken over quotes of andere tekens in een string die moeten ge-escaped worden.
Ik persoonlijk zou dus die magic_quotes niet gebruiken...

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Op een server waarvan je zelf de configuratie bepaalt maakt het natuurlijk niet zoveel uit. Het grote probleem is juist bij het schrijven van code die portable moet zijn, en je dus niet weet op wat voor configuratie de code moet gaan draaien.
Dankzij deze leuke feature moet je dan ineens allerlei afvragingen gaan doen, en in het ene geval wel en in het andere geval weer geen add/stripslashes gaan toepassen, dat maakt je code er natuurlijk niet leesbaarder en onderhoudbaarder op.
Dan is het ineens dus wel overhead en extra werk; en daar zitten weinig mensen op te wachten lijkt me.

[ Voor 13% gewijzigd door crisp op 13-05-2003 11:42 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
Het nadeel met die instelling is dat alle echo-txt ook wordt geescaped..

We hebben een keer grote problemen gehad met deze instelling in combinatie met een template-engine. Alle escape \ werden nogmaals ge-escaped. Gevolg: Onleesbare HTML prut voor de gebruiker.

Het lijkt me sowieso beter om het escpaen zelf te regelen. We maken hier altijd functies aan (txtin($string)). Zodoende kunnen we er later altijd nog een smiley functie of anti vloek functie aan toevoegen zonder dat we alle addslashes() commando's langs hoeven :)

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Ik hou persoonlijk niet van dingen die 'automatisch' gebeuren en zou het dus afraden. Het is imho van het zelfde soort luiheid als register_globals en beperkt je controle over je eigen code.

[ Voor 13% gewijzigd door Bosmonster op 13-05-2003 12:11 ]


Acties:
  • 0 Henk 'm!

  • wustenveld
  • Registratie: Februari 2002
  • Laatst online: 07-07 13:36
Ik hou ook niet van die automatische dingen, ik wil zelf kunnen bepalen wat mijn scripts doen en geen rekening houden met allerlei zaken als magic_quotes. Als ik iets naar een database schrijf dan schrijf ik die regel niet keer op keer maar knal het in een object/functie die alles voor me regelt, ik bepaal dan alleen zelf wel wat er allemaal met m'n data gebeurt voordat het er in gaat. Het kan ook zijn dat ik bijvoorbeeld voordat ik iets in een database zet dat ik er een serialize er overheen wil gooien, die zorgt er zoiezo al wel voor dat m'n data goed in de db komt

Acties:
  • 0 Henk 'm!

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 16-08 06:44

CyberSnooP

^^^^ schrijft --->

Het grootste nadeel van magic_quotes_gpc vind ik dat simpele hobby-scripters niet eens doorhebben dat het gebeurt en dat het op sommige plaatsen essentieel is voor je security. Natuurlijk is het ook vervelend als ze niet doorhebben dat er zoiets als security bestaat en dat PHP ze daar een handje bij helpt, maar tegelijkertijd veroorzaakt de instelling verwarring omdat invoer die een gebruiker doet helemaal niet zo aankomt in je script, maar al gewijzigd is voordat jij er zeggenschap over hebt gehad.

In het algemeen raad ik dit soort auto-security instellingen af en geef ik de voorkeur aan geheel transparante systemen die doen wat je van ze verwacht. Het is vervolgens aan de programmeur om in te zien dat er extra controles op gebruikersinvoer nodig voor deze te gebruiken in interne systemen (zoals een database query of een bestandsopvraag).

|_____vakje______|


Acties:
  • 0 Henk 'm!

  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
Ik heb nog even met een collega gediscussieerd, en naar aanleiding daarvan en van dit topic, kom ik op de volgende voors en tegens:

Voor Magic Quotes:
- je loopt niet het risico een security hole te creeeren door een keer te vergeten te escapen
- het is minder werk en je code ziet er schoner uit. Tenslotte stop je in de praktijk vaker iets in een database dan dat je iets direct vanuit een Get/Post/Cookie op het scherm zet (zie afweging functies paar posts hierboven)
- het staat in PHP 4 en de huidige snapshots van PHP 5 standaard aan, hogere mate van compatibiliteit met standaard installaties.

Tegen Magic Quotes:
- php moet met z'n handjes van jouw data afblijven - oftewel: verlies van controle over het proces en je gegevens
- als Magic Quotes uit staat, moet je veel bewuster met je code omgaan waardoor je wellicht minder fouten maakt
- Magic Quotes heeft een negatieve invloed op de snelheid

Ik neig ernaar om tegen Magic Quotes te zijn. Maar erg overtuigende argumenten heb ik niet. Die heb ik wel nodig!

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Burat schreef op 14 mei 2003 @ 11:24:
Ik heb nog even met een collega gediscussieerd, en naar aanleiding daarvan en van dit topic, kom ik op de volgende voors en tegens:

[...]
Ik neig ernaar om tegen Magic Quotes te zijn. Maar erg overtuigende argumenten heb ik niet. Die heb ik wel nodig!
Lees mijn opmerking over portability dan nog eens, ik zie dat niet terug in jouw rijtje...

[ Voor 5% gewijzigd door crisp op 14-05-2003 11:30 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 17-09 22:52
crisp schreef op 14 May 2003 @ 11:29:
[...]
Lees mijn opmerking over portability dan nog eens, ik zie dat niet terug in jouw rijtje...
dat is (imho) een non-issue. ongeacht de server, mijn script begint altijd met :

ini_set("magic_quotes_gpc", 0);
ini_set("magic_quotes_runtime", 0);

en verder staan ze gewoon uit. mijn standpunt inzake magic_quotes moge hieruit duidelijk zijn :) reden ? het geeft veel gezeur als het wel aanstaat, zeker gecombineerd met charset-vertalingen en (un)htmlentities.

Acties:
  • 0 Henk 'm!

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 16-08 06:44

CyberSnooP

^^^^ schrijft --->

tech-no-logical schreef op 14 May 2003 @ 12:35:
dat is (imho) een non-issue. ongeacht de server, mijn script begint altijd met :

ini_set("magic_quotes_gpc", 0);
ini_set("magic_quotes_runtime", 0);
Das een beetje het lastige, dit werkt meestal niet. Dit soort instellingen spelen al een rol bij de voorbewerking van de invoer, voordat jouw script er aan van pas komt.

(in combinatie met Apache is het overigens wel mogelijk in een . htaccess file een directive mee te geven die ini-instellingen voor PHP 'overschrijft')

|_____vakje______|


Acties:
  • 0 Henk 'm!

  • jvreuls
  • Registratie: Januari 2002
  • Laatst online: 01-09 10:11
tech-no-logical schreef op 14 mei 2003 @ 12:35:
[...]

dat is (imho) een non-issue. ongeacht de server, mijn script begint altijd met :

ini_set("magic_quotes_gpc", 0);
ini_set("magic_quotes_runtime", 0);
Dat werkt dus niet, magic_quotes_gpc wordt gebruikt voordat je script uitgevoerd wordt. Naderhand deze setting aanpassen heeft dus geen effect.
Je kunt wel set_magic_quotes_runtime() gebruiken om die setting bij runtime te veranderen.
En magic_quotes_gpc kun je dan in een .htaccess gooien, dan werkt het wel.

[ Voor 3% gewijzigd door jvreuls op 14-05-2003 12:50 ]

Circuits Online


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

CyberSnooP schreef op 14 May 2003 @ 12:42:
[...]
Das een beetje het lastige, dit werkt meestal niet. Dit soort instellingen spelen al een rol bij de voorbewerking van de invoer, voordat jouw script er aan van pas komt.

(in combinatie met Apache is het overigens wel mogelijk in een . htaccess file een directive mee te geven die ini-instellingen voor PHP 'overschrijft')
juist, en volgens php.net kan magic_quotes_gpc alleen geset worden via php.ini, .htaccess of httpd.conf. ini_set in je script heeft dus sowieso geen effect...

[ Voor 39% gewijzigd door crisp op 14-05-2003 12:50 ]

Intentionally left blank

Pagina: 1