Ça m'énerve !!!
Par Seza le samedi 11 juillet 2009, 13:12 - Actualité - Lien permanent
Aujourd’hui chers lecteurs,
Bien que je ne post que très rarement sur ce blog maintenant, je vais vous présenter une suite de billets que voici dès maintenant :
- http://www.antoinebenkemoun.fr/2009/07/securiser-un-serveur-apache-avec-php-la-problematique/
- http://www.antoinebenkemoun.fr/2009/07/securiser-un-serveur-apache-avec-php-debut-de-solution/
- http://www.antoinebenkemoun.fr/2009/07/securiser-un-serveur-apache-avec-php-suphp/
Je n’ai pas la prétention de me prendre pour un professionnel, de nombreuses fois j’ai rencontré et aidé des gens bien moins précis que moi sur le sujet mais moi-même je n’ai jamais été contre un peu d’aide, prêt à en apprendre plus, quand je bloquais sur un sujet qui me paraissais difficile.
Alors je n’ai pas pour habitude de descendre le premier venu lorsque qu’il dit une bêtise. Surtout qu’en à la base, cela part d’une bonne initiative, mais je dois dire qu’un ramassis de conneries, telles que j’ai pus en lire tout au long de ces trois articles, me fait bondir !
En extrait pour mémoire :
INTRO / CONTEXTE
Le PHP est un langage web qui permet de faire des sites web dynamiques. (…)
C’est souvent le langage de programmation sur lequel démarrent beaucoup de programmeurs autodidactes. Quand on lit ca, on peut se dire « Chouette ! C’est cool PHP on peut programmer simplement pleins de trucs trop biens ! Si je m’y mettais ?! ». D’un coté, c’est pas faux, vous allez nous coder un super site tout moche parcque vous savez pas utiliser Photoshop. D’un autre coté, vous allez surement coder un site bourré de failles de sécurité. (…)
Et oui, les sites PHP sont souvent bourrés de faille car les programmeurs débutants n’ont souvent pas de connaissance en programmation sécurisée. Si c’est vous à titre personnel, vous vous ferez démonter votre site perso et (…)
vous allez venir vous plaindre à votre hébergeur car il n’a pas sécurisé son serveur alors que c’est votre code qui est pourri. Et ca, ca m’énerve.
LES CONSEILS
Tout d’abord, lorsque vous installez un serveur web, il est fortement recommandé d’installer la version Suhosin. Il s’agit d’une version de PHP qui a été patchée pour réparer des failles de sécurités connues (…)
Ensuite, il faut avoir une version PHP à jour. (…)
La configuration de PHP peut largement influer sur la sécurité du serveur web. Il existe de nombreuses fonctionnalités de PHP qui permettent de faire des choses intéressantes pour le développeur mais très inquiétant pour l’administrateur système. (…)
Tout d’abord, la directive fopen est une directive qui devrait être désactivée par défaut. (…)
Ensuite, si un de vos clients a besoin de la directive fopen, car elle peut quand même être utile… Il parait. Vous allez donc devoir restreindre l’accès aux fichiers ce qui est possible dans PHP via la directive open_basedir. Grâce à cette directive, vous allez donc contraindre vos clients à ne pas sortir de leur répertoire. Il est également généralement recommandé de désactiver la directive register_globals mais je ne suis pas capable de justifier pourquoi. Je sais juste qu’il s’agit d’une option qui n’est plus d’actualité dans les versions de PHP d’aujourd’hui.
Je vous laisse la joie de lire ces articles dans leur intégralité et peut-être mes commentaires s’ils restent en place.
Moi ça m’énerve (pour reprendre les mots de l’auteur) de lire des choses comme ça !
Les débutants n’ont pas besoin de lire de telles bêtises et c’est dégradant pour les professionnels travaillant du mieux qu’il peuvent que de voir quelqu’un dire : pour sécuriser votre bécane, il faut désactiver cela, je ne sais pas trop à quoi cela sert mais c’est mieux.
Moi ça me fait sortir de mes gonds.
Commentaires
Dans le même genre tu as aussi http://phpfonctions.fr/ qui est un site de fonctions PHP où l'administrateur valide n'importe quoi (et ne semble d'ailleurs pas avoir de compétences particulières en PHP).
Par exemple le "vote AJAX" des fonctions n'a pas de protection ip/session/cookie ni même antiflood, et la requête qui se fait en POST peut aussi se faire en GET,
Mais surtout la liste des fonctions est hilarante.
Oui en effet comme beaucoup de site de code source qui propose des fonctions faisant tout et n'importe quoi.
On voit d'ailleurs dans phpfunctions.fr la célèbre signature des fichiers encodés en UTF-8 avec BOM lorsque l'on clique sur un lien (qui provoque l'envoie des entêtes http) petit truc que tous les programmeur " habitué " savent éviter.
Reste que ce genre de site peut-être utilise à celui qui cherche à apprendre php sans recopié bêtement les codes sources :)
Bonjour Seza,
Je viens de voir le post que tu as fait sur ton site. Je comprends donc mieux les réactions que tu as pu avoir sur mon blog.
Les remarques sur les codeurs PHP débutants sont fortement ironiques et ne sont absolument pas à prendre au sérieux. Je n'avais pas pour objectif de descendre les débutants codeurs mais de présenter une pointe d'humour plus ou moins réussie. On fait ce qu'on peut :-) Je m'excuse si cela a pu blesser quelqu'un.
Je me rends compte que j'y suis peut être allé trop fort et qu'il y a quelques inexactitudes dans mon article. Je suis bloggeur débutant, j'apprends.
Je pense cependant que le contenu de mes billets n'est pas à rejeter en bloc non plus. J'y présente une méthode parmi d'autre pour sécuriser un serveur web. Cette méthode a été acquis à travers des expériences et a fonctionné. Je souhaitais juste partager cela avec les autres. Je ne suis pas expert en PHP du tout mais administrateur système, je présente donc un point vue d'administrateur système. Je pense que d'autres administrateurs système se retrouvant dans certaines problématiques pourraient trouver ces articles utiles.
Antoine
Salut Antoine,
Aucun soucis, c'est bien de venir discuter ici. Tout d'abord ta série d'articles s'adresse aux débutants, le ton que tu y donnes (même si c'était de l'humour) te place comme étant l'expert en la matière.
Forcément quand tes articles présentent des imprécisions, non-sens et preuves directes de méconnaissances, tu comprendras mieux pourquoi pour des yeux comme les miens, de personnes habituées, tu passes direct du statut d'expert à celui d'usurpateur.
Donc concernant tes articles déjà le titre : J'aurais parlé des : " Bonnes pratique de bases " à adopté Pour l'administrateur système et non pas de sécurité. Si j'étais un adminsys, je m'attenderais à trouver :
- comment préparer mon environnement à accueilllir apache et php : emplacement, chroot, ram nécessaire, firewall, utilisateur unix à prévoir, backup, log, rotation des log, user quota, démarrage et extinction des services, etc...
- comment intégrer apache et php dans un environnement cohérent : multi ou mono utilisateur, utilisateurs unix ou virtuel, base ldap, association d'un serveur FTP, que penser des solutions de gestion Plesk & Webmin & Co...
Bref... Tu nous parles finalement trois tool tips sur la configuration de php.
Alors je réintère ce que j'ai déjà dit sur fopen() car tu persiste dans ta réponse. Qu'on bloque des fonctions telles que mail() d'un point de vue adminsys je comprend, mais fopen() ???!! Sais que fopen() ne fait pas que ouvrir des fichiers, mais toutes sortes de flux. Si tu veux bloquer fopen() pour une raison qui m'est vraiment très obscure, pour ne pas bloquer :
- file_get_contents(), fsockopen(), stream_socket_*(), etc ... car tout ceci fait la même chose
Vaut mieux bloquer des truc genre
- mail(), exec(), passthru(), proc_open(), shell_exec(), dl(), system(), shm_*() etc...
Si l'administrateur à bien fait son travail fopen() ne peut faire aucun mal. Par contre tu devrais savoir que glob() à déjà fait l'objet de plusieurs failles de sécurité. En tant qu'adminsys je m'attarderais à configurer au mieux toutes les options touchant à ce qui viens de l'extérieur etc... Voilà de quoi un adminsys devrait s'occuper en trois groupe :
allow_url_fopen
allow_url_include
safe_mode
safe_mode_gid
safe_mode_include_dir
safe_mode_exec_dir
safe_mode_allowed_env_vars
safe_mode_protected_env_vars
memory_limit
default_socket_timeout
max_execution_time
max_input_time
expose_php
register_globals
register_argc_argv
post_max_size
enable_dl
file_uploads
upload_max_filesize
open_basedir
disable_functions
disable_classes
short_open_tag
asp_tags
register_long_arrays
magic_quotes_gpc
magic_quotes_runtime
magic_quotes_sybase
variables_order
auto_globals_jit
error_reporting
display_errors
display_startup_errors
log_errors
log_errors_max_len
ignore_repeated_errors
ignore_repeated_source
report_memleaks
track_errors
Et pour répondre à ton commentaire qui répond à mon commentaire sur ton premier article sur ton site (on se suit ?), Tu n'es pas limité à un fichier php.ini. Tu peux personnalisés ces options via :
- php.ini
- virtual host
- .htcasses
- php.ini per dir
4 possibilités c'est plus que nécessaire pour établir une politique des gestions des droits PHP par site.
Ensuite je reprend ce que tu dis car je ne suis pas du tout d'accord. Tous serveurs paramétrés pour géré du multi utilisateur proprement n'utilise pas les compte unix pour se faire. Pour du mass multi utilisateur tu trouveras du ldap, sinon une base mysql généralement ou autre.
Utilisé les comptes unix pour géré de l'hébergement mutualisé c'est vraiment une très mauvaise idée à mon gout. D'ou l'inutilité de suPHP.
Alors tu as fais l'effort d'écrir un article, de présenté suPHP, apache un poil etc... Finit en beauté au corrigeant les petites betises que tu as glissé, fait un 4ème articles plus complet base toi sur ce que j'ai dit, sur les autres commentaires que tu as reçu, et surtout lit la doc de php pour t'assurer de ne pas balancer une annerie.
php c de la medr loooooolool!!1!
Argumente un peu :)
hqhq t'aimes pas qu'on te casse hein :)
http://tinyurl.com/2er5ueo sinon pour les gens qui sont intéressés de pourquoi ça suce le php :)
Oui c'est pour ça que ce n'est que le 4ème langage utilisé dans le monde depuis 2001. ça sucks vraiment trop...
Gardes tes réflexions puérils pour les skyblogs, apportes de vrais arguments qui proviennent de ta longue expérience et on en dicuste ;)
« Oui c'est pour ça que ce n'est que le 4ème langage utilisé dans le monde depuis 2001. ça sucks vraiment trop... »
Ah bah oui, c'est sûr que windows c'est clairement le meilleur OS vu que c'est le plus utilisé :)
Sinon pour les vrais arguments, plutôt que de répeter la même chose une nième fois sur encore un autre site, des gons ont fait des billets là dessus, d'où mon lien. Voilà, donc en nombres de vrai arguments, j'suis largement devant toi.
Tu ne peux pas comparer des programmeurs à des utilisateurs de windows. Les premiers sont des gens qui ont un besoin et des connaissances et se tournent vers un langage en fonction de cela. Choisir un langage est une décision.
Alors que les pauvres utilisateurs de windows malheureusement n'y connaisse souvent rien et on ne leur a pas demandé leur avis :) (j'espère que tu seras d'accord avec moi là dessus)
Etre numéro un n'a donc pas toujours le même sens.
Ça me fait d'ailleurs pensé à un critique de php qui était dans les premiers liens de ta recherche google :
php sucks parce que la comparaison ( "false" == 0 ) renvoie true.
Pourquoi ça sucks ? Heureusement que ça renvoie true !
Php est un langage à typage dynamique faudrait pas l'oublié. Donc les comparaisons se font d'un point de vue sémantique et le résultat tant critiqué est heureusement le bon résultat.
Et le bouffon qui a écrit cela, s'il savait utilisé Php, saurait que l'on peux avoir une comparaison plus strict avec l'opérateur ===. Alors ( "false" === 0 ) renvoie false...
Donc en plus de fonctionner normalement Php offre des possibilités qui vont au delà de son application native.
J'espère encore une fois que tu seras d'accord à ce sujet. Beaucoup de gens critiquent Php car ils recherchent un langage à typage fort alors forcément ils sont désappointés.
Donc dans tous les premiers liens tu as des critiques de la part de personne qui ne savent pas utiliser le langage ou qui, part manque de connaissance à son sujet, se sentent biaisé.
Dans l'autre moitié tu as des gens qui critiquent Php dans sa version 4... (qui n'était pas terrible c'est clair mais php 5 et 5.3 à largement renversé la vapeur).
Alors qu'est ce qui reste comme critique à l'heure actuelle de PHP ?
- Le fait qu'il ne soit pas natif UTF-8 (oui mais ça n'empêche pas de travaillé avec UTF-8 heureusement).
- Son inconsistance dans le nommage des fonctions (ouais on pourrait améliorer cela)
- L'impossibilité d'utiliser des threads (la prochaine implémentation de PHP proposera une solution plus puissante que les threads avec FPM et Gearman).
Tu vois autre chose ? Je ne pense pas que ces trois défauts en fasse un langage de merde.
Je pense qu'on peut aussi parler de la sécurité qui n'est pas géniale dans PHP et dont les dév ne font pas grand chose pour améliorer cela.
Sinon, énormément d'utilisateurs utilisant PHP ne connaissent pratiquement que ce langage, et donc l'argument du « c'est le plus utilisé » ne compte toujours pas dans ce cas là.
Sinon je ne vois pas en quoi une chaîne de caractère qui est égale à un nombre (sauf si c'était "0" == 0, ça serait encore passable ça) est sémantiquement correct. Certes c'est du typage dynamique (et le typage statique c'est mieux effectivement), mais il ne faut pas abuser à ce point là non plus. Et pourquoi créer un opérateur `===` qui fait le travail que devrait faire l'opérateur `==` ?
Après, certes mon PHP est assez rouillé, mais je n'ai jamais ressenti le besoin de l'utiliser depuis un bout de temps, parce que j'ai trouvé bien mieux ailleurs.
En effet PHP est utilisé par de nombreux "non-programmeurs" ou "bricoleurs" je ne sais pas comment les appelés. Ces utilisateurs, s'ils ont fait la notoriété de PHP, l'ont aussi dévalorisé notament sur le point de vue de la sécurité.
En fait PHP n'a jamais eu de problème de sécurité mais disons que sa configuration de base dans php 4 n'était pas du tout judicieuse. Le fameux échapement des données était désactivable à l'aide d'une simple méthode (et pas uniquement via php.ini comme beaucoup le prétendent (le php.ini à bon dos souvent)).
Depuis php 5 ces options ont été virées, ainsi plus de mauvaises utilisations faites par les non connaisseurs.
Donc la sécurité comme défaut. Oui pour monsieur touche à tout qui se fait son site web. Non pour le vrai programmeur. (et non pour tout le monde depuis php5).
Je suis assez de ton avis sur le "false". Si la chaine "0" peut facilement être interprété comme un entier et donc signifier FALSE comme en C, la chaine "false" quand à elle est un peu tirée par les cheveux.
Mais bon c'est ainsi, c'est le genre de discussion éternelle ou un groupe sera pour et un autre contre (comme pour le type hiting des scalaires en discussion à l'heure actuelle avec les uns pour pro typage fort et les autres pro autocasting).
Si tu ne ressens pas le besoin d'utiliser PHP alors ne l'utilise pas.
Chaque langage à ses avantages et ses inconvénients (et c'est souvent les avantages dans certaines situations qui sont des inconvénients dans d'autres) et chaque programmeur peut trouver midi à sa porte.
Moi je suis très à l'aise avece le typage dynamique, autant qu'avec le typage statique alors PHP me conviens très bien (surtout dans sa version 5.3 c'est un plaisir) car je ne fait que du web et j'ai besoin de lancer des applications rapidement.
Si je devais choisir un autre langage pour le web aujoud'hui je me tournerai certainement vers Python.
Enfin bon pour moi le "PHP sucks" n'est plus qu'un vieux mythe enterré depuis 6 ans (php 5.0 est le sorti en juillet 2004).