Question:
La société d'hébergement nous a conseillé d'éviter PHP pour des raisons de sécurité. Ont-ils raison?
Yumecosmos
2016-06-28 21:40:51 UTC
view on stackexchange narkive permalink

Je fais une refonte pour un client qui est naturellement préoccupé par la sécurité après avoir été piraté dans le passé. J'avais initialement suggéré d'utiliser une simple inclusion PHP pour les modèles d'en-tête et de pied de page et un formulaire de contact qu'ils voulaient. Ils sont réticents car leur société d'hébergement leur a dit que l'utilisation de PHP est un problème de sécurité qui pourrait permettre à quelqu'un de pénétrer dans cPanel et de prendre le contrôle du site.

Cela, pour moi, ressemble à le dire à quelqu'un de ne jamais conduire pour éviter un accident de voiture. Mon instinct est que l'hôte essaie de rejeter la responsabilité sur le client pour les failles de sécurité dans son propre système. De plus, PHP est toujours installé sur le serveur, que nous l'utilisions ou non, donc je me demande à quel point cela réduit réellement la surface d'attaque ... Mais comme je ne suis pas un expert en sécurité, je ne veux pas rester le pied dans la bouche.

J'ai dit à mon client que pour traiter le formulaire de contact, il allait avoir besoin d'une forme de script dynamique. (Faux?) Ils m'ont demandé si je pouvais simplement utiliser PHP sur cette page. Serait-ce plus sûr, ou est-ce l'équivalent de verrouiller les portières de votre voiture et de laisser la vitre baissée?

Dans quelle mesure l'affirmation selon laquelle n'importe quel script PHP est-elle vraie? , aussi simple soit-il, est-ce un problème de sécurité inhérent? Nous sommes sur un hébergement partagé sans SSL. Est-il raisonnable de supposer que nous avons été piratés en raison de l'utilisation de PHP? Serons-nous plus sûrs si nous ne l'utilisons pas, mais ne pouvons pas le désinstaller? Parce que sinon, nous avons d'autres problèmes.

(La réponse serait-elle différente pour toute autre langue ?)

Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (http://chat.stackexchange.com/rooms/41822/discussion-on-question-by-yumecosmos-hosting-company-advised-us-to-avoid-php-for).
Neuf réponses:
Alexander O'Mara
2016-06-28 22:06:53 UTC
view on stackexchange narkive permalink

Ce n'est pas tant que PHP lui-même a des problèmes de sécurité (en supposant que les mises à jour de sécurité sont nécessaires), car il existe de nombreux logiciels PHP populaires avec des problèmes de sécurité rampants. Vous pourriez reprocher à PHP d'être un langage qui vous donne assez de corde pour vous étouffer, mais le vrai problème est à quel point le code PHP est vulnérable. Il n'est pas nécessaire de chercher plus loin que la balise PHP Stack Overflow pour trouver des débutants en PHP écrivant du code horriblement vulnérable basé sur une atrocité d'un ancien didacticiel.

De plus, un nombre important de PHP populaires un logiciel connu pour ses failles de sécurité rampantes est basé sur un code et des pratiques de codage très anciens . Beaucoup de ces vieilles pratiques sont considérées comme de mauvaises pratiques en raison de problèmes de sécurité inhérents.

Cela, pour moi, ressemble à dire à quelqu'un de ne jamais conduire pour éviter un accident de voiture.

À peu près oui. Un meilleur conseil pourrait être du type "ne conduisez pas une vieille voiture sans airbags".

Mon instinct est que l'hôte essaie de rejeter la responsabilité sur le client pour les failles de sécurité dans leur propre système.

Pas nécessairement. Si un utilisateur utilise le même mot de passe pour le site WordPress et cPanel, compromettre le mot de passe WordPress compromet également cPanel. Ce serait la faute de l'utilisateur. Les pirates informatiques ont rarement besoin d'aller aussi loin, et utilisent simplement un shell PHP.

J'ai dit à mon client que pour traiter le formulaire de contact, ils auront besoin d'une forme de script dynamique. (Faux?)

Pas nécessairement vrai. Vous pouvez utiliser un service tiers pour gérer l'envoi du courrier. Ensuite, le service gère le script de serveur dynamique et prend en charge les implications de sécurité. De nombreux services de ce type sont disponibles avec différents ensembles de fonctionnalités, et ils sont populaires pour alimenter les formulaires de contact sur les sites générés statiquement.

Dans quelle mesure l'affirmation selon laquelle l'utilisation de n'importe quel script PHP, aussi simple soit-elle, est-elle un problème de sécurité inhérent?

Certains, mais pas beaucoup. PHP implique du code actif, à la fois dans PHP et dans le logiciel serveur qui l'exécute. S'il y avait une faille de sécurité dans ce processus qui ne dépendait pas d'un code PHP spécifique, elle pourrait être exploitée. Bien que ce risque soit minime, c'est un risque qu'un serveur sans un tel support n'a pas.

Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (http://chat.stackexchange.com/rooms/41900/discussion-on-answer-by-alexander-omara-hosting-company-advised-us-to-avoid-php).
Luis Casillas
2016-06-29 01:49:02 UTC
view on stackexchange narkive permalink

«Bien» n'est peut-être pas le mot juste, mais «sage», «prudent» et «consciencieux» viennent à l'esprit. PHP a, depuis sa création, adhéré à une philosophie qui dévalorise la correction dans les logiciels. Il y a un grand nombre de situations qu'un programme peut rencontrer où d'autres langages (par exemple Python) abandonneraient et lanceraient une erreur pour vous dire que votre programme est faux, mais PHP choisit à la place de faire quelque chose d'absolu et de continuer comme si les choses étaient juste très bien.

Gardez à l'esprit que l'exactitude est très importante pour la sécurité. Un langage enclin à ignorer silencieusement les erreurs à gauche et à droite aura plus que sa juste part de programmes avec des problèmes de sécurité. Par exemple, vous pouvez avoir un morceau de code qui, selon vos programmeurs, protège contre une certaine attaque, mais qui est en fait ignoré car l'interpréteur ignore une erreur.

De plus:

  • PHP est conçu pour plaire au plus petit dénominateur des programmeurs avec le moins de motivation pour devenir bon dans leur métier. Et donc le plus susceptible d'écrire des logiciels non sécurisés.
  • L'équipe PHP a une histoire de tentatives profondément imparfaites pour résoudre les problèmes de sécurité courants. Regardez par exemple la protection contre les injections SQL, qui trahit des tentatives répétées erronées de résolution du problème: real_escape_string (parce que la escape_string d'origine était cassée, mais ils ne l'ont supprimée que plus tard ) contre ajoute des barres obliques contre mysql_escape_string / pg_escape_string et ainsi de suite. Alors que presque tous les autres langages ont simplement utilisé des instructions préparées et des paramètres de requête et ont obtenu une conception extensible à toutes les bases de données dès le premier essai. peut écrire des logiciels sécurisés en PHP, si vous l'essayez, vous nagez beaucoup à contre-courant.
Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (http://chat.stackexchange.com/rooms/42135/discussion-on-answer-by-luis-casillas-hosting-company-advised-us-to-avoid-php-fo).
Machavity
2016-06-29 00:57:11 UTC
view on stackexchange narkive permalink

Les problèmes de sécurité de PHP peuvent généralement être réduits à deux catégories

Systèmes non corrigés

À l'heure actuelle, les statistiques Wordpress affichent plus de la moitié de tous les utilisateurs exécutent PHP sur des versions de PHP qui sont passées en Fin de vie (PHP 5.2 - 5.4). En deux semaines, PHP 5.5 passe à EOL, puis il passe à environ 80% de toutes les installations. Maintenant, pour être honnête, certaines installations Linux Enterprise / LTS rétroporteront les correctifs de sécurité, mais la grande majorité d'entre eux n'utilisent pas de correctifs rétroportés (ou certains ne corrigent pas leurs systèmes). Pire encore, beaucoup de gens refusent de mettre à jour PHP lui-même. Soit ils ne peuvent pas / ne veulent pas mettre à jour leur code, soit ils pensent que les anciens logiciels sont plus stables.

Wordpress (application PHP n ° 1 utilisée dans le monde) a fait un effort concerté pour s'assurer que les utilisateurs restent informés date sur le logiciel lui-même (et ils ont fait de grands progrès), mais malgré cela, seuls 40% utilisent la dernière version de Wordpress. Cela signifie qu'environ 60% peuvent avoir une vulnérabilité de sécurité non corrigée. Et ce n'est que le programme de base. Wordpress a un énorme écosystème de plugins, et beaucoup d'entre eux ont leurs propres vulnérabilités de sécurité.

Ensuite, il y a d'autres problèmes, comme beaucoup de code plus ancien utilisant le défunt mcrypt bibliothèque. Et ce n'est qu'un plugin PHP que vous pouvez compiler.

Maintenant extrapolez ceci aux serveurs qui ne fonctionnent pas et rapportez les statistiques à WP. Cela ne brosse pas un joli tableau. L'été dernier, j'ai trouvé un site Web exécutant une page de commerce électronique qui était toujours sur Apache 1.3.3 et PHP 4.1.2. Il était si ancien que SSLv2 était activé ...

Mauvaises pratiques

Si vous traitez assez longtemps des questions SO PHP, vous verrez beaucoup de gens pratiquer du mauvais code. Certains des problèmes que j'ai rencontrés au fil des ans

  • Injection SQL
  • Penser MD5 est un bon moyen de protéger les mots de passe
  • Utiliser des API obsolètes int leur code (c'est-à-dire ext / mysql , l'ancien connecteur MySQL)
  • Faire confiance à l'entrée de l'utilisateur pour exécuter le code (c'est-à-dire en utilisant eval avec les données fournies par l'utilisateur)
  • Ne pas désactiver les risques de sécurité dans le code PHP (c'est-à-dire la fonction exec)

Pour les non formés, cela ressemble à un problème PHP, quand c'est le codeurs et leurs écosystèmes qui produisent les problèmes. Peut-être étaient-ils pressés. Peut-être ont-ils embauché un type qui fait ça pendant son temps libre et "a fait que ça marche".

Est-ce que ça peut être sécurisé?

OUI! Mais cette sécurité nécessite des efforts. Gardez votre installation PHP à jour. Heck, gardez tout votre serveur à jour. L'hôte ne fera pas la sécurité et les correctifs? Trouvez un autre hôte. (Je suis étonné de voir les gens qui rechignent à cela). Créez votre propre serveur (les machines virtuelles sont bon marché). Mais surtout, faites attention. Apprenez tout ce que vous pouvez sur la sécurité. Ne laissez pas simplement votre site Web et votre serveur aller en mer.

Quelqu'un qui vous dit que PHP n'est pas sûr est juste paresseux.

_Construisez votre propre serveur (les VM sont bon marché) ._ - Ne le faites que si vous savez comment administrer une machine Linux, ou si l'administration est (avec compétence) faite pour vous.Les personnes ayant des machines virtuelles sans aucune idée de la façon de les rendre / les garder en sécurité est un problème important en soi.
@marcelm Vrai, mais au moins vous pouvez travailler avec votre propre VM, par opposition à un hôte qui ne mettra rien à niveau
L'idée que toutes les langues sont égales du point de vue de la sécurité est tout simplement fausse.Dire que vous pouvez résoudre les problèmes ne signifie pas que c'est la même chose qu'une langue qui ne les a pas ou vous oblige à introduire activement ces problèmes.
@JimmyJames Je n'ai jamais prétendu que toutes les langues étaient également sécurisées.Mais PHP est activement développé et, s'il est correctement corrigé et configuré, peut être assez sécurisé.L'OP demandait si PHP est intrinsèquement non sécurisé, ce qui n'est pas le cas.
"Quelqu'un qui vous dit que PHP n'est pas sûr est simplement paresseux."-> Je suis totalement d'accord avec ça!
Les systèmes non corrigés ne rendent pas PHP non sécurisé à lui seul.Ce n'est pas parce qu'une version de PHP a une faille de sécurité que le code que vous exécutez avec cette version de PHP rendra votre site vulnérable à cette faille de sécurité.Vous devrez utiliser n'importe quel code vulnérable pour être victime de la faille de sécurité.Si c'est une faille qui peut être exploitée quel que soit votre code, alors bien sûr.
"Quelqu'un qui vous dit que PHP n'est pas sûr est simplement paresseux": Ou est réaliste quant à la paresse qui va se produire.Je veux dire, il est également possible d'écrire un site Web sécurisé en assembleur brut, mais en réalité, cela ne se produira probablement pas.
La plupart de ces facteurs existent également dans d'autres langues.Comment est-ce que MD5 a quelque chose à voir avec PHP?
Aussi [très peu sûr]: utiliser `unserialize ()` sur une entrée externe [le vecteur d'attaque réellement exploitable le plus courant].PHP a un tas de vulnérabilités, mais elles sont généralement difficilement exploitables dans des conditions réelles.
munkeyoto
2016-06-28 22:04:12 UTC
view on stackexchange narkive permalink

PHP n'est ni moins, ni plus sûr, ni plus sûr que tout autre langage (Java, Rails, etc.). Tout est question de codage. Des freins et contrepoids sont-ils en place pour détourner, défendre, prévenir et / ou atténuer une attaque. Citant:

WhiteHat Security a effectué des évaluations de vulnérabilité de plus de 30 000 sites Web en utilisant .NET, Java, ASP, PHP, Cold Fusion et Perl. Les langages les plus utilisés étaient .NET (28,1% des applications Web), Java (24,9%) et ASP (15,9%).

...

Le langage de programmation .Net avait en moyenne 11,36 vulnérabilités par emplacement, Java 11,32 et ASP 10,98. Le langage le plus sécurisé, ColdFusion, avait six vulnérabilités par emplacement. Perl avait sept vulnérabilités par slot et PHP en avait 10.

...

Java représentait 28% des vulnérabilités trouvées et ASP 15%. «Encore une fois, le nombre d'applications rédigées dans la langue ainsi que la complexité des sites Web doivent être considérés comme un facteur contributif», indique le rapport. PHP représentait également 15% des vulnérabilités découvertes. ColdFusion ne représentait que 4% des vulnérabilités et Perl 2%. ( source)

Cela ne dit rien sur la façon dont les sites ont été développés en termes de bonnes pratiques de codage. Par exemple, si vous prenez des programmeurs non qualifiés (faute de meilleurs termes) dans chaque langue, ces nombres pourraient être inversés et perl pourrait avoir le plus de vulnérabilités, avec .Net en ayant le moins. Tout se résume à ce que le code lui-même est censé faire. Le code a-t-il été programmé pour remplir sa seule fonction avec une falsification / abus testé avant d'être mis en développement?

Il existe de nombreuses feuilles de triche de sécurité, guides de bonnes pratiques et d'autres articles qui couvrent les problèmes de sécurité, mais cela devient une situation où le client est fatigué sur la base des conseils de son fournisseur. Cela peut être un obstacle car cela devient une sorte de "dit-il" dit-elle une sorte de lutte pour convaincre votre client de vous permettre de créer le site en PHP. Une méthode que je pourrais utiliser si je voulais toujours utiliser PHP serait de créer un site de démonstration, puis d'utiliser un scanner d'évaluation de vulnérabilité (Acunetix, AppScan, Burpsuite) pour vérifier les failles. Si aucun n'est trouvé, je présenterais le rapport détaillant la posture de sécurité de ce que vous avez construit à la fois au client et créerais de telle manière (PDF, etc.) qu'il soit présentable au fournisseur.

Je ferais attention aux allégations d'équation avec Java sans réserve, car l'installation du JRE (d'autant plus s'il est également activé) est un risque de sécurité pour les clients en soi, et encore moins pour le serveur.
.Net n'est pas un langage de programmation ... L'article est-il réputé?
@BalinKingOfMoria, quand quelqu'un dit ".Net" dans le contexte des langages de programmation, ils font généralement référence à C # avec le runtime .Net / CLR.Parfois, ils font référence à Visual Basic.NET avec le runtime .Net / CLR.
@Mark Il me semble juste étrange que non seulement ils n'utilisent pas le nom propre, mais qu'ils ne le mettent pas non plus en majuscules correctement.
@NateDiamond: Je suppose que cela fait référence aux [servlets JAVA] (https://en.wikipedia.org/wiki/Java_servlet), qui ne nécessite l'installation de JRE dans aucun client.
.net est le même langage de bas niveau, peu importe si vous l'écrivez avec c #, VB, php, f #, etc ...
@lepe Bon point, même s'il nécessite son installation sur les serveurs eux-mêmes, ce qui reste un vecteur de menace.
Donc, en regardant le rapport auquel vous avez fait référence, il indique que 11% des sites étaient PHP mais que 15% des vulnérabilités ont été trouvées.C'est une surreprésentation de 36% de plus que ce à quoi vous vous attendriez si vous supposez que les vulnérabilités doivent être réparties de manière égale entre les langues.Java et .NET sont également surreprésentés dans les vulnérabilités mais seulement de 12% et 11% respectivement.Selon cette métrique, PHP a (de loin) les pires statistiques de ce rapport.
Pour moi, cette réponse équivaut à dire que toutes les voitures sont également sûres, c'est juste que les pilotes knucklehead sont le problème!Je pense qu'il est intrinsèquement inexact de parler d'une langue sans parler de la facilité de trouver des erreurs dans cette langue.PHP est faiblement typé, ce qui conduit à faire des erreurs que vous ne feriez jamais dans une autre langue.Essentiellement, le langage vous PERMET de faire ces erreurs.Mettre tout le fardeau sur le développeur pour écrire un code parfait est une erreur, et dire que c'est purement un problème de codage passe à côté.Le codeur et la langue ne sont pas si faciles à séparer.
Il est intéressant de noter que les sites PHP «n'ont pas tendance à être aussi volumineux ou complexes que les sites .NET ou Java, mais souffrent encore de plusieurs des mêmes problèmes».Donc, en gros, bien qu'ils soient sensiblement plus simples et moins complexes, les sites PHP présentaient autant de vulnérabilités que les sites .NET ou Java plus complexes.C'est comme noter qu'une application d'un million de LOC avait un nombre absolu de bogues similaire à une application de 100k LOC, puis conclure que les deux sont de qualité similaire.
@Voo "Donc, en gros, bien qu'ils soient sensiblement plus simples et moins complexes, les sites PHP avaient autant de vulnérabilités que les plus complexes."En fait, c'est pire que ça.Comme je l'ai noté ci-dessus, un nombre disproportionné de vulnérabilités a été trouvé dans des sites construits avec PHP.Donc, sur la base de ce rapport référencé, ces sites sont plus simples et présentent ** plus ** de vulnérabilités par site.
Avant de dire qu'il est "tout aussi sécurisé", veuillez lire [cet article] (http://phpsecurity.readthedocs.io/en/latest/_articles/PHP-Security-Default-Vulnerabilities-Security-Omissions-And-Framing-Programmers.html) - Des URI spéciaux et d'autres fonctionnalités peuvent activer des vulnérabilités, et si vous regardez dans la documentation PHP, ils ** ne mentionnent même pas les vulnérabilités XML qui peuvent se produire avec des entrées non fiables **.Comparez cela à Python, juste par exemple - La page principale de leur [documentation xml] (https://docs.python.org/2/library/xml.html#xml-vulnerabilities) montre les vulnérabilités possibles pour chaque analyseur pris en charge
En tant que programmeur, je ne suis pas du tout d'accord avec l'affirmation selon laquelle PHP n'est ni plus ni moins sûr que les autres langages.Ce n'est pas que vous ne pouvez pas écrire des programmes sécurisés en PHP, c'est juste que PHP rend la tâche déraisonnablement difficile tout en rendant ridiculement facile l'écriture de programmes non sécurisés.
@dandavis .NET n'est pas du tout un langage, c'est comme dire qu'IBM PC est un langage.Le langage de bas niveau auquel la plupart des autres langages .NET se comparent est CIL.Ces confusions stupides aident noöne.
@NoBugs Le manuel PHP est maintenu indépendamment du langage, bien que ce soit une ressource officielle assez impressionnante comparée à certaines que j'ai vues.N'hésitez pas à contribuer une page sur la sécurité XML.Maintenant, quant à savoir si quelqu'un va réellement * lire * et * comprendre * la documentation, en PHP ou en Python, c'est une question différente ...
@IMSoP _Sams Teach Yourself PHP, MySQL et Apache en 24 heures_ est également une ressource utile mais il recommande en fait de ne pas s'échapper lorsque vous interrogez avec une instruction SELECT - recherchez "SELECT" et regardez la requête sur 384 (`" SELECT fax_number, tapezdepuis le fax où master_id = $ _POST [sel_id] "` et [autres pages.] (https://books.google.com/books?id=2hm3ScwClKIC&q=SELECT+WHERE#v=snippet&q=SELECT%20WHERE&f=false).Si les personnes qui écrivent des livres de référence PHP ne connaissent pas la meilleure façon d'interroger, pourquoi s'attend-on à ce que le programmeur PHP moyen le fasse?
@SteveSether, votre analogie avec les voitures est très éloignée et vous ne fournissez aucun argument expliquant pourquoi un langage faiblement typé est par définition peu sûr ou moins sûr.sans oublier qu'il n'y a pas de définition acceptée de ce que signifie faiblement typé
@ClaudiuCreanga Veuillez lire "PHP est une fractale de mauvaise conception" pour les arguments réels.Le point que j'essaie de faire est de donner une idée générale du problème.Les vrais arguments ne peuvent pas être faits dans un commentaire.
@NoBugs Donc, pour contrecarrer ma suggestion que le manuel ne soit pas considéré comme faisant partie du langage de base, vous élargissez encore la définition afin que PHP en tant que langage soit apparemment responsable de la sortie de toutes les maisons d'édition dans le monde?Je suis sûr qu'il y a aussi d'horribles livres sur Ruby et Java;Je ne sais pas ce que cela prouve.
@IMSoP Honnêtement, je ne pense pas avoir vu de telles erreurs dans les livres / documents Ruby et Java, c'est exactement ce que je veux dire.Pour une meilleure sécurité, il doit y avoir une culture cohérente de considérer tout ce que la bibliothèque x / y / z peut faire, et pourrait faire de manière inattendue qui ne semble pas faire tellement partie de la culture utilisateur PHP.Prenons par exemple les hacks récents de Magento, dont l'essentiel était qu'il ["valide les sessions d'administration uniquement si une requête contient le préfixe '/ admin /'"] (http://blog.checkpoint.com/2015/04/20/ analyse-vulnérabilité-magento /)
@NoBugs Je ne dirais pas que c'est vraiment "le cœur" de l'attaque: "Ces sauvegardes bien implémentées contraignent vraiment notre surface d'attaque, et nous n'avons pas pu trouver de vulnérabilités critiques (RCE, LFI sans suffixe) avec cette approche."En fin de compte, ils ont dû travailler assez dur pour trouver une vulnérabilité SQLi et enchaîner toute une série d'attaques pour l'exploiter.Je ne vois pas cela comme une preuve de "culture non sécurisée" que, par exemple, le fait d'autoriser l'entrée JSON à éliminer les clauses WHERE dans votre ORM: https://groups.google.com/forum/#!topic/rubyonrails-security/t1WFuuQyavI
fluffy
2016-06-29 06:23:06 UTC
view on stackexchange narkive permalink

L'un des problèmes fondamentaux de PHP est en réalité un problème fondamental avec le modèle CGI des choses (sur lequel PHP est basé, malgré les pièges de mod_php ) - à savoir que les données des utilisateurs sont entremêlées avec des scripts, et cela devient très facile pour par exemple l'utilisateur télécharge pour devenir un script exécutable. Ce n'est pas nécessairement un problème avec PHP lui-même, mais avoir PHP disponible sur un système en fait une très grande surface d'attaque; un certain nombre de problèmes de sécurité des plugins WordPress proviennent de cet aspect, par exemple.

Les déploiements traditionnels basés sur CGI ont historiquement atténué ce problème en permettant uniquement aux scripts CGI de s'exécuter à partir d'un répertoire de confiance (tel que / cgi-bin / ) mais de nombreux fournisseurs d'hébergement partagé ont finalement assoupli cette restriction pour des raisons de "commodité", et cette même commodité est omniprésente dans PHP.

De nombreuses applications modernes basées sur PHP utilisent souvent .htaccess en tant que mécanisme de routage de requêtes rapide et efficace qui aide à atténuer ces problèmes, mais c'est loin d'être universel et n'est toujours pas une solution facile.

À mon avis, le plus gros problème avec PHP est simplement qu'il est si facile que du code PHP arbitraire soit rendu disponible pour s'exécuter sur n'importe quel serveur sur lequel il est configuré, et donc si le code écrit en PHP n'est pas nécessairement plus ou moins sécurisé que le code écrit dans d'autres langues (bien que sa bibliothèque standard ne fasse pas exactement de faveur quand il s'agit d'écrire cure code), le mécanisme par lequel les scripts PHP s'exécutent constitue un défi de sécurité massif, car PHP est même disponible sur un serveur.

HashHazard
2016-06-28 21:52:42 UTC
view on stackexchange narkive permalink

Je suis d'accord avec votre évaluation selon laquelle l'utilisation de PHP ne nécessite pas de risque de sécurité. Certains fournisseurs hésitent à utiliser PHP pour la même raison que WordPress est considéré comme un risque de sécurité. C'est à la mode. Plus quelque chose est répandu, plus l'énergie est investie dans le développement d'exploits.

Cela dit, je n'éviterais pas PHP s'il est mis en œuvre correctement, reçoit des correctifs en temps opportun et dispose d'un certain niveau de surveillance pour détecter les activités malveillantes . Conclusion: les risques de sécurité sont indépendants des risques de sécurité de la plate-forme. Changer les langages de script n'atténue pas les risques de sécurité associés à un code mal écrit / développé / implémenté.

Wordpress * est * un risque de sécurité.Même le noyau a des pratiques de codage horribles et une longue histoire de vulnérabilités.
@Jacco C'est vrai, mais il y a du mauvais code dans les entrailles de beaucoup d'applications.WordPress est principalement ciblé car il est populaire.Le noyau a subi quelques améliorations au cours des dernières itérations, bien que loin d'être parfait.
Nommez une application / un système populaire qui n'a pas un long historique de vulnérabilités.oh ouais android
@ClaudiuCreanga Vraiment?* [android] (http://androidvulnerabilities.org) * est l'exemple que vous allez utiliser comme système sans une longue histoire de vulnérabilités?
Bristol
2016-06-28 22:51:40 UTC
view on stackexchange narkive permalink

Si tout ce que vous voulez est d'inclure un en-tête / pied de page standard, PHP pourrait être exagéré - de simples inclusions côté serveur pourraient le faire.

PHP n'est pas intrinsèquement dangereux, comme l'ont soutenu les réponses précédentes. Mais si vous n'avez pas besoin d'un langage de script complet sur le serveur, la meilleure pratique de sécurité consiste à ne pas en installer un. Si, comme vous le dites, PHP va de toute façon être installé sur le serveur, alors le risque supplémentaire créé en l'utilisant est d'environ zéro tant que vous ne faites rien de stupide. Et inclure un modèle n'est pas stupide à moins que vous n'analysiez le nom du fichier à partir d'un paramètre d'URL.

Le formulaire de contact aura besoin d'une sorte d'API et de base de données derrière lui pour gérer la requête POST lorsque quelqu'un la soumet et c'est la qualité de l'écriture de cette partie va faire ou défaire les choses - quel que soit le langage que vous utilisez, s'il s'agit d'une base de données SQL, l'injection SQL vaut la peine d'être recherchée; si l'entrée de l'utilisateur est de quelque manière renvoyée à eux ou au client dans une page Web, alors l'injection de script (java) doit être prise en compte et tout doit être correctement échappé au HTML. Par rapport au formulaire de contact, l'utilisation d'un include est aussi sûre que possible.

Si vous ne vouliez qu'un ensemble de pages Web, pas une application Web interactive, le nec plus ultra en matière de sécurité est d'utiliser un générateur de site statique - le serveur n'a qu'à servir des fichiers, ce qui donne une surface d'attaque beaucoup plus petite.

So:

Dans quelle mesure l'affirmation selon laquelle l'utilisation de n'importe quel script PHP, aussi simple soit-elle, est-elle un problème de sécurité inhérent?

Formulé de cette façon, presque aucun. Un script d'en-tête d'inclusion n'est certainement pas une vulnérabilité. Avoir PHP installé en premier lieu lorsque vous n'en avez pas besoin n'est pas la meilleure pratique de sécurité, l'avoir installé et ne pas le mettre à jour régulièrement chaque fois que des correctifs de sécurité sortent est un problème potentiel, tout comme ne pas avoir une politique de qui est responsable de ces mises à jour - après avoir terminé la conception du site, le client sera-t-il responsable de cela? Ou le fournisseur d'hébergement? Si le client s'inquiète à ce sujet, il ne devrait pas avoir PHP sur le serveur en premier lieu. Sinon, il n'y a aucune raison liée à la sécurité de ne pas l'utiliser dans des endroits où vous savez ce que vous faites.

"Avoir PHP installé en premier lieu lorsque vous n'en avez pas besoin n'est pas la meilleure pratique de sécurité, l'avoir installé et ne pas le mettre à jour régulièrement chaque fois que des correctifs de sécurité sortent est un problème potentiel" ... J'avais peur de ça!Malheureusement, c'est un hébergement mutualisé, donc pas beaucoup de choix à cet égard.: / Je dois en savoir plus sur les inclusions côté serveur, merci pour le tuyau!
@Yumecosmos S'il s'agit d'un hébergement mutualisé, les autres locataires du service d'hébergement présentent un risque bien plus grand que PHP lui-même.Les hôtes partagés sont généralement réticents à installer quelque chose pour un seul des nombreux (parfois milliers) locataires et trouveront toutes sortes de raisons pour l'éviter.Un simple "vous êtes sur l'hébergement mutualisé, ce que vous voyez est ce que vous obtenez" serait plus honnête (et tout à fait juste).
@ceejayoz À ce stade, presque chaque fois que mon site a été piraté, il est passé par un autre site sur le même hébergement partagé en tant que vecteur.Cependant, il y a certainement des choses que vous pouvez faire pour limiter cette possibilité, comme faire très attention à vos autorisations de fichiers, etc.J'ai un travail cron nocturne qui vérifie les autorisations de mes fichiers et détecte les modifications md5sum sur tous mes fichiers et quelques autres choses.
Neil Davis
2016-06-29 06:16:09 UTC
view on stackexchange narkive permalink

Les langages et les outils ne sont pas intrinsèquement non sécurisés, le mauvais code et les pratiques de sécurité le sont.

Puisque php a une faible barrière à l'entrée, les personnes qui ne comprennent pas la sécurité du réseau et le codage sécurisé peuvent créer des problèmes de sécurité avec des décisions non informées.

Ce n'est pas l'outil, c'est le singe qui l'utilise ;-)

Le code écrit dans n'importe quelle langue peut ne pas être sûr.

Les langues ne sont peut-être pas intrinsèquement peu sûres, mais elles * peuvent * avoir des principes de sécurité appropriés profondément ancrés dans leur conception.PHP * ne le fait pas *, et c'est un euphémisme.Voir https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
Et c'est pourquoi tout le monde devrait aller apprendre Python!Désolé de citer "cet autre langage est nul, alors apprenez Python!"les sites sont de mauvaise forme.Vous pouvez également écrire des ordures en Python.J'en ai réparé des tonnes.Python n'est pas une solution miracle pour les programmeurs incompétents.Vous écrivez du code en utilisant le langage standardisé par votre employeur ou, dans mon cas, ce que veut le client.Je suis moi-même agnostique.Je code en Python, php, Java, .net, Perl et je gère même d'anciens sites de fusion à froid.Veuillez ne pas détourner les messages pour promouvoir l'agenda Python.
* Je * n'ai mentionné Python nulle part.Je n'ai même pas encore * appris * Python (même si je suis sur le point de le faire).Comment, au nom du bon sens, vous pouvez interpréter mon commentaire précédent comme "pousser l'agenda Python" est déconcertant.Mais votre réponse ici se résume essentiellement à "Aucune langue n'est plus sûre que toute autre langue", ce qui est absurde.([Cette réponse] (http://security.stackexchange.com/a/128601/96753) fournit quelques détails sur les raisons.)
Vous avez fourni un lien vers une opinion d'évangélistes enragés de Python
@user356540 La toute première chose que dit eevee à propos de Python: "J'adore Python. Je serai aussi heureux de vous en plaindre, si vous le voulez vraiment. Je ne prétends pas que c'est parfait; j'ai juste pesé ses avantages parses problèmes et a conclu que c'était la meilleure solution pour les choses que je veux faire. "Ce n'est pas la même chose qu'être un évangéliste python enragé.
La page principale de Python [docs xml] (https://docs.python.org/2/library/xml.html#xml-vulnerabilities) montre les vulnérabilités possibles pour chaque analyseur pris en charge.Bien que PHP ait également ces vulnérabilités, ils ne les mentionnent pas sur la [documentation du lecteur xml] (http://php.net/manual/en/book.xmlreader.php).: (Malheureusement, même les livres PHP courants ont des exemples avec des injections SQL.
"Vous pouvez également écrire des ordures en Python".C'est un homme de paille.L'argument est que PHP rend difficile l'écriture de code correct pour la myriade d'arguments (souvenez-vous de `register_globals`?) Mentionnés ici et ailleurs, non pas que vous ne pouvez pas écrire de mauvais code avec d'autres langages.
Aucun de ces commentaires n'invalide les points de ma réponse initiale.Vous pouvez coder en toute sécurité dans n'importe quelle langue.L'inverse est également vrai.C'est au programmeur de connaître ses outils et son code en toute sécurité.Si vous pensez qu'une langue fera cela pour vous, vous ne comprenez pas la sécurité.
+1 au total, mais;pourquoi tout le monde suppose / déclare que PHP a une faible barrière à l'entrée et comment cela est-il lié à la sécurité du réseau?Et à quoi est-ce comparé?Ruby, Python, Java, C, Perl?Je concéderai que Perl a une barrière plus élevée, mais la plupart des évangélistes Ruby / Python se vantent du fait que leur langage a un point d'entrée inférieur à la normale.Et pour être honnête, je pense que les langages typés comme Java ont un point d'entrée plus bas que non typé.En fait, quand je code en PHP, je tape tout.Je dirais que PHP a un point d'entrée plus élevé que la plupart des autres langages de son âge.
@Voo que l'on est mort depuis longtemps en php.chaque langue a des fonctions mortes non sécurisées
@Claudiu Il était dans la langue pendant quelque chose comme une décennie (et seulement supprimé en 2012), même par défaut.Nommez une fonctionnalité obsolète qui approche le même niveau de folie dans n'importe quel autre langage courant.Le fait est que si vous aviez proposé quelque chose comme ça dans un autre langage courant, cela aurait été immédiatement rejeté.
twigg
2016-07-25 16:30:55 UTC
view on stackexchange narkive permalink

"Ils sont réticents parce qu'ils ont été informés par leur société d'hébergement que l'utilisation de PHP est un problème de sécurité qui pourrait permettre à quelqu'un de s'introduire dans cPanel et de prendre le contrôle du site"

Si la société d'hébergement pense qu'ils besoin de cPanel pour exécuter PHP puis il est temps de déplacer l'hôte



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...