Comprendre la conformité PCI et son impact sur le développement de PHP
PCI signifie «l'industrie des cartes de paiement», mais beaucoup, c'est un ensemble de normes vagues imposées par les cartels internationaux secrets qui visent à enterrer des âmes sans méfiance avec de lourdes statuts et des litiges juridiques. La vérité est beaucoup plus ennuyeuse. En fait, PCI est un ensemble de directives de sécurité développées par une coalition de sociétés de cartes de crédit et d'experts en sécurité de l'industrie pour réglementer la façon dont les demandes se comportent lors du traitement des informations de crédit ou de débit. Les sociétés de cartes de crédit imposent ces normes aux banques, ce que les banques imposent ensuite à ceux d'entre nous qui exploitent des sites Web de commerce électronique. Dans cet article, nous supprimerons certains malentendus persistants sur PCI, en découvrons PCI d'une hauteur de 20 000 pieds, puis se concentrer sur les exigences liées au codage général et à la PHP.
Points clés
PCI Misonding
Pas étonnant, il y a beaucoup de malentendus autour de la norme PCI. L'un des malentendus est qu'ils sont comme le code de conduite de la mafia, non écrit nulle part, afin qu'ils puissent être interprétés comme vous le souhaitez. Bien sûr, c'est incorrect. Pour apprendre la description complète des normes PCI, visitez simplement PCiSecuritystandards.org. Un autre malentendu est que les normes de sécurité PCI ne s'appliquent qu'aux «grandes entreprises» telles que les banques et les grands détaillants. Ils conviennent à tous ceux qui acceptent les informations sur les cartes de crédit pour payer les marchandises. Si vous avez écrit un site Web PHP pour que votre mère vende sa célèbre tarte au citron, vous avez un système qui correspond aux directives PCI. La troisième idée fausse est que si vous suivez les normes PCI, vous serez protégé du piratage malveillant et que vos données resteront sécurisées. Bien sûr, c'est bien, mais la vérité est que les normes PCI sont des guides et des idées, pas des techniques spécifiques (elles doivent être vagues pour s'adapter à toutes les architectures et plateformes). De toute évidence, plus vous vous concentrez sur la sécurité, moins vous serez attaqué, mais n'importe qui peut être attaqué. Si vous avez au moins essayé de répondre aux attentes de PCI, votre avis sera mieux à la fois en termes de droit et de consommateur. Enfin, PCI n'est pas quelque chose que vous pouvez accomplir avec un seul et ensuite prendre une profonde inspiration. Cette norme vous oblige à faire un examen PCI une fois par an, donc c'est comme un travail d'assurance qualité ou écouter votre conjoint, un travail continu. Le simple fait est que PCI est quelque chose que chaque programmeur travaillant sur une application qui traite les données de carte de crédit doit connaître, quelle que soit la taille. Oui, c'est pourquoi les concessionnaires ne collectent que de l'argent.
Bases de PCI
La norme PCI se compose de 12 exigences de base. La norme est mise à jour environ tous les deux ans, au cours de laquelle une variété de fichiers de guidage plus spécifiques sont publiés qui traitent d'un sous-ensemble du monde PCI. Par exemple, en février 2013, le personnel de PCI a publié un livre blanc sur PCI et le cloud computing. Ces rapports spéciaux sont également disponibles sur le site Web de PCI. Comme nous le verrons, de nombreuses exigences PCI sont plus liées au réseau, mais si vous n'avez pas une compréhension de base du PCI complet, quel est l'intérêt de parler de ces choses? Ces exigences sont:
Certains de ces projets sont liés aux décisions politiques, c'est-à-dire des décisions qui indiquent clairement comment vous travaillez pour protéger les informations sur les cartes et garantir la sécurité globale du réseau et des applications. D'autres exigences ont à voir avec le réseau lui-même et le logiciel que vous pouvez utiliser pour le protéger. Certains d'entre eux impliquent la phase de conception du processus, comment vous construisez et configurez votre application. Il existe peu d'exigences liées au code, et il n'y a aucune exigence pour décrire des techniques de programmation spécifiques qui vous recommandent de rester en sécurité. Pour garder la longueur relativement courte, je limiterai mon ironie et ma sagesse (rapport 70:30) et me concentrerai sur les deux derniers groupes.
Exigence 2 - N'utilisez pas le fichier de configuration par défaut du fournisseur / mot de passe
À bien des égards, cela est presque évident. Le personnel de sécurité nous dit cela depuis que nous avons commencé à nous soucier de ces choses. Mais il est surprenant de savoir à quel point il est facile d'utiliser un compte et un mot de passe par défaut dans la plupart des logiciels que nous utilisons (comme MySQL) (surtout lorsque vous installez quelque chose et tout est dans l'état "test"). Le danger augmente ici car la plupart d'entre nous créent nos applications autour de certains logiciels de base, plutôt que de faire le tout à partir de zéro. Ce pourrait être un package que nous utilisons pour gérer le chiffrement et le stockage des clés (voir ci-dessous), ou il peut s'agir du cadre de l'ensemble de l'application. Quoi qu'il en soit, facile à retenir, facile à implémenter: n'utilisez pas le compte par défaut.
Exigence 3 - Protégez les données du titulaire de carte stocké
Dans la plupart des hacks de sites Web de détail de haut niveau, je me souviens, il y avait des vols de cartes ou d'autres données enregistrées par le site Web, donc j'ai répertorié cela comme la partie la plus importante de la norme PCI. De toute évidence, toutes les données de carte que vous stockez doivent être cryptées. Et vous devez faire un bon travail de cryptage. Pour ceux qui connaissent très bien le chiffrement, vous savez que faire un bon travail de chiffrement des données signifie que vous avez bien géré les clés de chiffrement. La gestion des clés tourne autour du problème de la génération, du stockage et de la mise à jour des clés utilisées dans les processus de chiffrement. Les stocker peut être un gros problème car vous voulez vous assurer que personne ne peut entrer dans le système et voler les clés. Les stratégies de gestion varient dans la façon de diviser une clé en plusieurs parties; profond. Bien sûr, si vous utilisez des produits commerciaux pour gérer le cryptage, vous pouvez leur laisser une gestion clé, bien que vous souhaitiez vous assurer que leur processus est fiable et qu'il correspond à votre approche. La plupart des produits commerciaux sont développés en pensant à PCI et seront donc construits selon les normes PCI, mais cela ne vous empêchera toujours pas d'effectuer une inspection secondaire. De plus, si vous minimisez ou même éliminez la quantité de données que vous stockez, la tâche de protéger les données deviendra beaucoup plus facile. Autrement dit, les données du titulaire de la carte peuvent être leur nom, anniversaire, numéro de carte, période de validité, code de vérification de la carte (CV) (trois ou quatre chiffres à l'arrière ou à l'avant de la carte), etc. Moins vous économisez d'articles, moins vous avez besoin de crypter et moins vous avez de la responsabilité. Heureusement, il s'agit d'un domaine assez spécifique des normes PCI qui définissent clairement les données que vous pouvez et ne pouvez pas enregistrer. Vous pouvez enregistrer le numéro de carte (PAN - Numéro de compte principal), le nom du titulaire de la carte, la date d'expiration et le code de service. Si vous enregistrez une casserole, si vous souhaitez l'afficher, vous devez le bloquer, et seuls les six premiers et quatre derniers chiffres peuvent être affichés au maximum. Vous ne pouvez pas stocker l'intégralité du contenu d'une broche, d'un code CV ou d'une bande magnétique. La question que vous devez vous poser pendant la phase de conception est la quantité de données ennuyeuses que vous souhaitez vraiment conserver. La seule vraie raison de le garder est que vous souhaitez offrir une expérience facile à vos clients la prochaine fois. Vous pouvez garder votre anniversaire afin que vous puissiez leur envoyer une petite invitation amicale pour votre anniversaire. Toutes ces données doivent être cryptées et protégées, alors assurez-vous d'en tirer une utilisation commerciale fiable. L'exigence 4 (chiffrer les données transmises) est considérée comme une partie de cette partie, mais je la considérerai comme faisant partie de l'infrastructure et je n'entrerai pas dans les détails.
Exigence 6 - Développer et maintenir des systèmes et applications sécurisés
Il s'agit d'une exigence liée au code. Ne pas cibler une fonction ou une classe spécifique, mais au moins assurez-vous de suivre les normes de sécurité générales et essayez de rendre vos affaires aussi sûres que possible. Vous utilisez donc simplement des techniques de codage (quelle que soit la langue) qui ne rendront pas votre application vulnérable aux attaques évidentes. Par exemple, vous essayez d'empêcher l'injection SQL en prenant des précautions lorsque vous acceptez les données de formulaire, vous essayez de bloquer les XS, etc. Pour plus d'informations sur l'évitement de certains des problèmes de sécurité les plus courants, consultez d'autres articles publiés sur SitePoint (cet article et cet article et d'autres articles que vous pouvez trouver si vous recherchez "sûr".
nécessite 7 et 8 - Accès restreint et IDS uniques
ces deux choses sont liées à la façon dont vous accédez à votre application, donc c'est quelque part entre le codage et la conception. Il ne faut aucun problème pour exiger que chaque visiteur ait un identifiant unique à moins que - vous permettez aux gens de vous connecter et de magasiner via le profil invité. Je peux penser à plusieurs sites Web qui vous permettent de le faire, ce qui n'est pas mauvais en soi, mais utiliser les profils de groupe est dangereux et vous devez faire très attention à vous assurer qu'ils n'ont pas beaucoup de permission. D'une manière générale, vous devriez essayer de définir un ID unique, même si l'ID n'est pas l'ID que vous avez enregistré. Par exemple, vous pouvez faire en sorte que les gens se connectent en tant qu'invité, mais créent immédiatement un fichier de configuration unique pour l'événement en arrière-plan. Nous voulons également limiter l'accès physique aux données du titulaire de carte. Cela peut être un soupçon de l'avenir, alors que nous pourrons rétrécir les gens à des tailles submicroscopiques comme le voyage fantastique d'Isaac Asimov et les injecter dans le dispositif de stockage pour obtenir les données 1 et 1 des cartes 0… ou cela peut également être lié aux salles de serveurs verrouillées, badges pour tous les visiteurs, sans permettant à personne de se rapprocher des bandes de sauvegarde, etc.
Exigences 10 - Suivi et enregistrement de tous les accès aux ressources / données
Enfin, ne sous-estimez pas l'importance de suivre et d'enregistrer tout ce qui accède aux ressources ou aux données du titulaire de carte ... Je veux dire tout. Les événements qui doivent être enregistrés comprennent la connexion, la déconnexion, l'accès aux données; Vous devez implémenter un journal sécurisé qui vérifie les journaux tous les jours pour trouver des problèmes et enregistre les journaux pendant un an. Pour les utilisateurs de PHP, il serait avantageux de se familiariser avec la norme de journalisation PSR-3 du groupe PHP-Fig, qui fournit un moyen unifié et flexible de configurer votre journalisation. Plutôt que de plonger en profondeur ici, je vous suggère de lire l'article d'introduction de Patrick Mulvey.
Résumé
Une chose que je veux vraiment souligner, c'est que PCI n'est pas la cerise sur le gâteau. Il s'agit de la partie de base de la création d'une application qui utilise des données de carte de crédit. Si vous écrivez une application qui reçoit ce type de données, cela fonctionnera pour vous, que vos clients le sachent ou non. La plupart du contenu est supérieur au niveau d'encodage, mais il est réel et vous devez toujours y faire attention. images de Fotolia
FAQ (FAQ) sur la conformité PCI et le développement de PHP
La conformité PCI fait référence à la conformité avec la norme de sécurité des données de l'industrie des cartes de paiement (PCI DSS), un ensemble de normes de sécurité conçues pour garantir que toutes les entreprises qui acceptent, traitent, stockent ou transmettent les informations de carte de crédit conservent un environnement sécurisé. Pour les développeurs PHP, la compréhension et la mise en œuvre de la conformité PCI sont cruciales car elles aident à protéger les données sensibles des clients, à réduire le risque de violations de données et à établir la confiance avec les utilisateurs. Le non-respect des réglementations peut entraîner des pénalités, des amendes et même la perte de la capacité de traiter les paiements.
Les développeurs PHP peuvent assurer la conformité PCI à travers plusieurs étapes clés. Ces étapes incluent l'utilisation de pratiques de codage sécurisées pour prévenir les vulnérabilités communes, le cryptage des données sensibles, la mise en œuvre de puissants contrôles d'accès, les tests et les applications de mise à jour régulièrement et la mise à jour et la maintenance des politiques de sécurité de l'information.
Certaines vulnérabilités de sécurité communes dans PHP incluent l'injection SQL, les scripts croisés (XSS) et la contrefaçon de demande de site transversal (CSRF). Ces vulnérabilités peuvent être évitées en utilisant des instructions préparées ou des requêtes paramétrées pour empêcher l'injection SQL, valider et nettoyer l'entrée de l'utilisateur et les jetons anti-CSRF pour empêcher les attaques CSRF.
Les développeurs PHP peuvent traiter les données de carte de crédit en toute sécurité en suivant les exigences PCI DSS. Cela comprend le chiffrement des données des titulaires de carte transmises sur un réseau public ouvert, la protection des données des titulaires de carte stockées, la mise en œuvre de puissants contrôles d'accès, la surveillance et le test régulièrement du réseau et la maintenance des politiques de sécurité de l'information.
Le cryptage joue un rôle crucial dans la conformité PCI. Il aide à protéger les données sensibles en convertissant des données sensibles telles que les informations sur les cartes de crédit en un format qui ne peut pas être lu, qui ne peut être décrypté qu'à l'aide d'une clé de décryptage. Cela garantit que même si les données sont interceptées pendant la transmission, les individus non autorisés ne peuvent pas les lire ou les utiliser.
Les développeurs PHP peuvent limiter l'accès physique aux données des titulaires de carte en s'assurant que chaque personne ayant un accès à l'ordinateur se voit attribuer un identifiant unique et restreindre l'accès aux données du titulaire de carte en fonction des principes que l'entreprise doit connaître la mise en œuvre de solides mesures de contrôle d'accès. De plus, ils devraient revoir régulièrement les contrôles d'accès et les mettre à jour au besoin.
Le fait de ne pas se conformer aux PCI DSS peut entraîner une série de conséquences, notamment des amendes, des pénalités et même la perte de la capacité de traiter les paiements par carte de crédit. De plus, il peut endommager la réputation de l'entreprise et entraîner une baisse de la confiance des clients.
Les développeurs PHP devraient tester régulièrement leurs systèmes et applications pour les vulnérabilités de sécurité. La fréquence des tests dépendra des exigences spécifiques du PCI DSS, mais en tant que meilleures pratiques, les systèmes et les applications doivent être testés au moins une fois par an, ainsi qu'après tout changement significatif.
La politique de sécurité de l'information est un ensemble de règles et de procédures suivies d'une entreprise pour protéger ses actifs d'information. Il est important pour la conformité PCI car il permet de garantir que tous les employés comprennent leurs rôles et responsabilités dans la protection des données du titulaire de carte et fournit un cadre pour la mise en œuvre et la maintenance des contrôles de sécurité.
Les développeurs PHP peuvent rester à jour avec les dernières exigences du DSS PCI et en vérifiant régulièrement le site officiel du Comité des normes de sécurité PCI, en vous abonnant à des newsletters et blogs pertinents, en assistant à des conférences de sécurité et en webinaires, et en participant à des programmes de formation et de certification en matière de sécurité et de certification Meilleures pratiques de sécurité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!