3330

Ben disons que quand tu utilises une commande (au pif, system en PHP) qui permet d'exécuter du code au niveau système avec l'utilisateur lançant PHP, ce n'est pas une surprise que le user apache/http soit en mesure de lancer une commande système à l'aide de PHP cheeky
avatar

3331

Certes mais ça peut rendre une attaque par injection autrement plus dangereuse. Donc s'il s'agit d'un fonction non documentée (apparemment ça n'est pas le cas de system en PHP) ça peut être un problème.
Java a eu des failles lié a ça à une époque. L'appel à des fonctions non documentées permettaient une élévation de privilèges alors qu'il était censé être en mode sandbox.
avatar

3332

En l'occurence, il n'y a aucun test avec "system" mais bien des fonctions qui sont soit non documenté soit mal documenté.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

3333

Bah si, dans l'exemple que je citais (./3326) il utilise la fonction PHP shell_exec ? (qui est documentée, et dont la doc explique que ça exécute une commande système)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3334

Relis alors parce que le papier ne dit pas "OMG Shell Exec permet de lancer un executable"

mais le fait que PHP fait trop de reintrepretations a sa facon, et le code

shell_exec(bash." something")

actuellement lance "bash" si le define "bash" n'est pas definie

When the PHP function shell_exec() receives theundefined constant bash, it usesthe string representation of the constant.
This means that the string bash will be concatenated with the user - supplied input, allowing command injection.


En gros sur une ligne de commande:

php -r 'echo shell_exec(escapeshellcmd(bash." -c id"));'

Plutot que de tenter d'executer " -c id" va executer "bash -c id" parceque PHP va trouver "bash" et comme ce n'est pas un define, va le traiter comme du texte

Ou peut etre plus explicite:

php -r 'echo shell_exec(escapeshellcmd(ls." /"));'
PHP Notice:  Use of undefined constant ls - assumed 'ls' in Command line code on line 1

Notice: Use of undefined constant ls - assumed 'ls' in Command line code on line 1
backup
bin
boot
dev
etc
gcc4ti
git
home
lib
lib32
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
svn
sys
tigccpp
tmp
usr
var

(testé localement)

Le notice Notice: Use of undefined constant ls - assumed 'ls' in Command line code on line 1 est un comportement indesirable
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

3335

Arg!
PHP est encore plus crade que dans mes souvenirs.
avatar

3336

C'est un comportement inhabituel, je suis d'accord, mais c'est le comportement qui a été souhaité par les développeurs, qui est connu, qui est le même au moins depuis PHP 4, et qui lève une notification visuelle.
(Et l'utilisation de exec, shell_exec ou system ne se fait pas n'importe comment de toutes façons, parce que de base tu peux tout pourrir).
Après, je suis d'accord qu'on devrait plutôt avoir un Warning (ou une option dans php.ini) pour gérer ça.
avatar

3337

un mot clef ne devrait JAMAIS etre inteperté comme une chaine.


system_exec(echo." prout")

va foirer parce que echo est un mot clef de PHP.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

3338

ls n'est pas un mot clé PHP, c'est un mot-clé bash. Et il n'y a pas que bash, il y a aussi Windows comme environnement d'exécution... En PHP, c'est scandir qui liste le contenu d'un dossier.

Ce n'est pas que ce soit un mot clé le problème, c'est que c'est considéré comme une constante (parce que hors des délimiteurs de chaîne de caractère) et qu'une constante non déclarée prend automatiquement la valeur de son nom.
echo ne peut évidemment pas être déclaré comme une constante, donc c'est normal que ça foire.

(Note 1 : Je ne dis pas que c'est un comportement sûr, hein, je dis juste que c'est un comportement voulu par le système et connu depuis le début ; le gros du danger est surtout que si le dev se plante dans ses chaînes de caractères, il ne s'en rendra peut-être pas compte, mais vu que ça fera ce qu'il voulait que ça fasse...)

(Note 2 : utiliser un IDE de qualité aide à se préserver de telles erreurs ^^)
avatar

3339

L'utilisation de ls ici est juste un exemple.

N'importe quel "mot clef" non defini par le language ou par un define() sera convertit en chaine de caractere.

Encore une fois c'est un comportement plus qu'indesirable, et pas que pour system_exec.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

3340

Godzil (./3339) :

N'importe quel "mot clef" non defini par le language ou par un define() sera convertit en chaine de caractere.
N'importe quoi sera converti en chaîne, oui (pas seulement un mot-clé). Mais c'est une "feature", pas un "bug" ^^
avatar

3341

Mais c'est une feature de merde qui risque d'entrainer des bug.
avatar

3342

#PHP# ^^
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3343

./3334 : c'est clairement indiqué dans la spécification de PHP, tu peux penser ce que tu veux de cette fonctionnalité mais ça n'en fait pas un bug pour autant (même si TU LE DIS AVEC DES MAJUSCULES). Le papier du mec n'apporte rien d'intéressant en disant que cette fonctionnalité peut être facilement mal utilisée, c'est déjà documenté officiellement.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3344

Uther (./3335) :
Arg!
PHP est encore plus crade que dans mes souvenirs.
A l'époque (à vous de remettre les choses dans leur contexte d'il y a pas loin de 20 ans), c'était une feature... et à l'usage, comme plusieurs autres features de l'époque, il s'est avéré que ce n'était pas si terrible comme idée.

Maintenant (depuis longtemps ; des années), utiliser une constante non définie (qui fait un fallback sur une chaine de caractère dont le texte est le nom de la constante non définie) lève un avertissement.
PHP a la bonne (ou mauvaise) habitude de rester compatible au maximum (enfin, on va dire ça) lors des montées de versions (sinon, le public ne monte pas de version, ça s'est vu dans le passé) ; et du coup c'est encore là...

Jusqu'à PHP 7.1 inclus, cet avertissement est de niveau notice (normalement, on les affiche en développement).
A partir de PHP 7.2 (publié il y a quelques jours), cet avertissement est de niveau warning (plus "grave" ; normalement, on les loggue en production) ; l'idée étant d'indiquer aux développeurs qui utiliseraient encore cette fonctionnalité qu'ils ne devraient pas. Et le message d'erreur indique, depuis 7.2, que cette fonctionnalité lèvera une exception (une Error) dans le futur.

En somme : oui c'est pourri. Non ça peut pas juste être changé du jour au lendemain. Oui, le travail de changement est en cours.

Cf https://3v4l.org/N9rE7 pour les messages d'erreur des différentes versions de PHP.
Et cf https://wiki.php.net/rfc/deprecate-bareword-strings pour la RFC à propos du changement arrivée en 7.2 et qui devrait se poursuivre en 8.0.
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

3345

Le papier du mec c'est surtout : "si vous codez comme un porc il va y avoir des failles !".

3346

3347

Je bosse actuellement sur un projet PHP au boulot, et le serveur de prod a été configuré correctement : les notices font planter l’exécution du code, ce qui évite ce genre de problème (en dév on les laisse passer, pour les voir et les corriger justement). Si les mecs configuraient bien leurs serveurs aussi... embarrassed
avatar
loclamor
Mondo Photo
Le voyage en photo et en 1 clic

3348

(Je suis assez d'accord avec toi smile Pendant longtemps je n'ai pas affiché les Notice en dev, et seuls les warnings plantaient en prod ; aujourd'hui, je ne laisse rien passer (et mon IDE non plus embarrassed ))
avatar

3349

La configuration correcte en production est de désactiver les notices (E_NOTICE, et aussi le spam E_DEPRECATED et E_STRICT) pour ne pas spammer les logs avec.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3350

Non, la configuration correcte en prod est d'interrompre le script sans affichage vers stdout et uniquement vers stderr. Du coup, pas de spam, ça s'arrête dès que le problème est rencontré.
avatar

3351

Bonne chance pour faire tourner un code tiers reel avec ce genre de configuration. roll
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3352

donc tout code tiers reel est écrit avec deux pieds gauches?

3353

Le code tiers réel est souvent développé pour une ancienne version de PHP (et c'est un vrai souci pour la maintenabilité et la sécurité).
avatar

3354

Les versions modernes de PHP ne travaillent plus que sur des entiers?
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

3355

avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3356

top

3357

\o/

C'est une bonne nouvelle, d'autant plus que ça ouvre la voie à du code fonctionnant à la fois sur LibreOffice et Office (via une petite couche de compatibilité à écrire).
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

3358

Dommage que ca ne soit que pour Excel. Je remplacerais volontiers VBA par python dans tout MS Office.
avatar

3359

Et faudra voir aussi si c'est vraiment compatible avec le Python standard, vu qu'ils parlent de Python sauce .NET.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3360

Uther (./3358) :
Dommage que ca ne soit que pour Excel. Je remplacerais volontiers VBA par python dans tout MS Office.
À mon avis, s'ils font le boulot pour Excel, il sera également fait dans Office au complet.
Par contre, j'espère que ça sera du Python 3 (Iron Python dont l'article parle est du Python 2) : ça n'a aucun sens en 2017 de partir sur du Python 2.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant