[php] is er iets onveilig aan "$dubbele_quotes?"

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pim
  • Registratie: Juli 2001
  • Laatst online: 17-09 11:39
Ik ben een PHPbb aan het updaten, wat beveiligings updates en bugfixes zouden moeten zijn.

In een hoop bestanden moet ik de quotes om variablen weghalen, bijv dit:

$module['Users']['Ranks'] = "$file";

vervangen door:

$module['Users']['Ranks'] = $file;

Zouden de dubbele qutoes gewoon overbodig zijn, of zou het om veiligheidsredenen gebeuren?

Acties:
  • 0 Henk 'm!

  • Martijn02
  • Registratie: September 2000
  • Laatst online: 19-09 14:55

Martijn02

/* No Comment */

In dit geval overbodig, en ik kan me voorstellen dat het mischien iets sneller is als de parser niet eerst een string met een variabale erin hoeft te parsen en die te assignen. Aan de andere kant zou het me niets verbazen als de zend engine "$var" intern gewoon optimaliseert naar $var.

Acties:
  • 0 Henk 'm!

  • Equator
  • Registratie: April 2001
  • Laatst online: 09-09 15:29

Equator

Crew Council

#whisky #barista

Inweze worden var's tussen " " gewoon hetzelfde geparsed als zonder.
Var's tussen enkele quotes worden niet geparsed.

PHP:
1
2
3
4
5
6
$var1 = "boehoe";
echo "De koe zegt $var1";
//geeft dezelfde output als
echo "De koe zegt " . $var1;
//Niet het zelfde is:
echo 'De koe zegt $var1';


* Equator prefereerd de methode om var's buiten de dubbele quotes te laten. Vind ik duidelijker..
Maar kwa veiligheid maakt het niet uit lijkt mij..

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Code als:
$module['Users']['Ranks'] = "$file";

Is complete onzin en zie je eigenlijk alleen bij mensen die het concept variabelen nog niet helemaal vatten. Wat daar staat is eigenlijk "stop de waarde van $file in een string en ken vervolgens de string toe aan de array" terwijl je gewoon de waarde van file aan de array wilt toekennen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Janoz schreef op woensdag 25 januari 2006 @ 10:37:
Code als:
$module['Users']['Ranks'] = "$file";

Is complete onzin en zie je eigenlijk alleen bij mensen die het concept variabelen nog niet helemaal vatten. Wat daar staat is eigenlijk "stop de waarde van $file in een string en ken vervolgens de string toe aan de array" terwijl je gewoon de waarde van file aan de array wilt toekennen.
Je kan het ook zien als een impliciete cast,
PHP:
1
2
$module = "$file"; //vs.
$module = (string) $file;

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik denk dat in 99% van de gevallen waar dit wordt gebruikt de implicite cast een ongewenst side effect of nooit opgevallen is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

Ik dacht altijd dat je een foutmelding krijgt met error_reporting op E_ALL maar een kleine test (http://dev.msrvsaurus.nl/test.php) toont dat je die niet krijgt. Dus het zou wel correcte php zijn, dubieus?

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
pietje63 schreef op woensdag 25 januari 2006 @ 14:15:
Ik dacht altijd dat je een foutmelding krijgt met error_reporting op E_ALL maar een kleine test (http://dev.msrvsaurus.nl/test.php) toont dat je die niet krijgt. Dus het zou wel correcte php zijn, dubieus?
Hoezo dubieus? Het is gewoon volledige en correcte PHP, handig en slim is een tweede. Sla de manual er maar op na.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

pietje63 schreef op woensdag 25 januari 2006 @ 14:15:
Ik dacht altijd dat je een foutmelding krijgt met error_reporting op E_ALL maar een kleine test (http://dev.msrvsaurus.nl/test.php) toont dat je die niet krijgt. Dus het zou wel correcte php zijn, dubieus?
Je bent in de war met
PHP:
1
$myarray[piet] = 34;

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Tsunami
  • Registratie: Juni 2002
  • Niet online
Het lijkt mij sowieso overbodig, omdat er al bij het assignen van de variabele is duidelijk gemaakt dat het een string is. Gaat het dan niet fout als je $file als een array assignt, en hem vervolgens tussen quotes zet?

Acties:
  • 0 Henk 'm!

  • Equator
  • Registratie: April 2001
  • Laatst online: 09-09 15:29

Equator

Crew Council

#whisky #barista

Tsunami schreef op woensdag 25 januari 2006 @ 14:25:
Het lijkt mij sowieso overbodig, omdat er al bij het assignen van de variabele is duidelijk gemaakt dat het een string is. Gaat het dan niet fout als je $file als een array assignt, en hem vervolgens tussen quotes zet?
PHP:
1
2
3
error_reporting(E_ALL);
$var1[0] = "boehoe";
echo "De koe zegt $var1[0]";
De koe zegt boehoe
Nee dus.. ;)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

CyberJ schreef op woensdag 25 januari 2006 @ 14:47:
PHP:
1
2
3
error_reporting(E_ALL);
$var1[0] = "boehoe";
echo "De koe zegt $var1[0]";



[...]

Nee dus.. ;)
Wel als je een associatief array gebruikt:
PHP:
1
2
3
error_reporting(E_ALL);
$var1["piet"] = "boehoe";
echo "De koe zegt $var1[piet]";

Als je daar geen notice wil krijgen, dan moet je andere quotes gebruiken, of nog gekkere dingen doen met accolades om je variabelenaam heen.

Verder is een impliciete cast naar een string zelden tot nooit de reden om iets als $var1 = "$var2"; te doen. Het zou niet de eerste keer zijn dat ik zoiets zie:
PHP:
1
2
3
$var1 = "hello";
$var2 = "$var1";
$var2 = $var2 . " world";

Daarnaast heb ik de phpBB code een paar keer gezien, en ik meen me te herinneren dat ze, wanneer ze willen casten, dat gewoon expliciet doen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Equator
  • Registratie: April 2001
  • Laatst online: 09-09 15:29

Equator

Crew Council

#whisky #barista

-NMe- schreef op woensdag 25 januari 2006 @ 15:00:
[...]

Wel als je een associatief array gebruikt:
PHP:
1
2
3
error_reporting(E_ALL);
$var1["piet"] = "boehoe";
echo "De koe zegt $var1[piet]";

Als je daar geen notice wil krijgen, dan moet je andere quotes gebruiken, of nog gekkere dingen doen met accolades om je variabelenaam heen.
Niet dat ik je niet vertrouw, maar ik heb dit net even getest, maar dat werkt prima.

De nu volgende code geeft echter een notice "Use of undefined constant piet - assumed 'piet' in /home/erik/test.php on line 4"
PHP:
1
2
3
error_reporting(E_ALL);
$var1[piet] = "boehoe";
echo "De koe zegt $var1[piet]";

Maar hij parsed wel goed :D

[ Voor 8% gewijzigd door Equator op 25-01-2006 15:33 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

CyberJ schreef op woensdag 25 januari 2006 @ 15:15:
Niet dat ik je niet vertrouw, maar ik heb dit net even getest, maar dat werkt prima.
Dit geeft echter een notice "Use of undefined constant piet - assumed 'piet' in /home/erik/test.php on line 4"
Dat zeg ik:
-NMe- schreef op woensdag 25 januari 2006 @ 15:00:
Als je daar geen notice wil krijgen...
;)

Een notice definiëer ik trouwens niet als "prima", aangezien je daar nogal onvoorspelbaar gedrag mee in de kaart zou kunnen spelen. Notice = vies, en zou niet voor moeten komen in je code. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Equator
  • Registratie: April 2001
  • Laatst online: 09-09 15:29

Equator

Crew Council

#whisky #barista

De code die jij had getyped werkte zonder het geven van een notice.
De code die ik daaronder schreef geeft die notice: Misschien niet duidelijk genoeg door mij geschreven. Verander ik even..

En inderdaad: een notice is niet prima. Ik heb error_reporting(E_ALL) in al mijn pagina's staan.

@Pietje: Ja, tijdens development bedoel ik ook..

[ Voor 42% gewijzigd door Equator op 25-01-2006 15:50 ]


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

CyberJ schreef op woensdag 25 januari 2006 @ 15:32:
En inderdaad: een notice is niet prima. Ik heb error_reporting(E_ALL) in al mijn pagina's staan.
Tja, dat is weer een ander punt.. Tijdens de ontwerpfase wel, daarna niet meer. Notices die ik vaak niet weg werk zijn simpele echo's van lege database velden.Kan wel overal een isset tegenaan gooien maar daar wordt de code niet mooier van (niet dat mooie code het ultieme doel is..).

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!

Pagina: 1