Existe-t-il un cadre de sécurité PHP qui protège les numéros de téléphone ainsi que les mots de passe?

StackOverflow https://stackoverflow.com/questions/120977

Question

Je comprends le mantra de "ne lancez pas votre propre". en ce qui concerne les cadres de sécurité du site.

Dans la plupart des cas, de toute façon.

Je vais collaborer sur un site intégrant la messagerie texte au système.

J'aimerais utiliser un cadre de sécurité existant et bien testé pour protéger les données des utilisateurs, mais j'en ai besoin également pour protéger le numéro de téléphone d'un utilisateur.

Je ne voudrais pas être responsable de la liste des numéros de téléphone cellulaire d'utilisateurs qui obtiennent des données spammées ou non.

Quelles suggestions la communauté peut-elle offrir?

Était-ce utile?

La solution

Notez que les techniques appliquées aux mots de passe ne sont pas applicables ici. Vous pouvez stocker un mot de passe salé et haché (bien que la valeur de le faire puisse être contestée), mais cela ne fonctionne pas pour les numéros de téléphone.

Si quelqu'un prend votre serveur, il peut faire tout ce qu'il peut. Cela doit inclure la récupération du numéro de téléphone, mais n'inclut pas la récupération du mot de passe s'il est bien haché. Le numéro de téléphone ne constitue donc qu'un cas particulier de protection des données confidentielles.

Si les numéros de téléphone sont véritablement les seules données sensibles de l'application, vous pouvez envisager de masquer la partie de l'application qui envoie les textes et de chiffrer de manière asymétrique les numéros de téléphone. Dans un processus différent (ou sur un ordinateur différent), exécutez une application qui possède la clé pour déchiffrer les numéros de téléphone. L'interface de cette application aurait peut-être une fonction prenant un non chiffré et le message à envoyer. Conservez cette application simple, testez et auditez la morve. Cachez-la du monde extérieur ou utilisez l'authentification pour prouver que la demande provient bien de votre application principale, ou des deux.

Ni la base de données ni la partie principale de l'application ne sont capables de décrypter les numéros de téléphone (vous ne pouvez par exemple pas les rechercher), mais ils peuvent les chiffrer pour les ajouter à la base de données.

La technique générale s'appelle "Séparation des privilèges", ce qui précède n’est qu’un exemple.

Notez que les numéros de téléphone doivent généralement être complétés avec des données aléatoires avant le cryptage (comme la récupération d'un mot de passe haché). Sinon, il est possible de répondre à la question "le numéro de téléphone crypté X" est-il sans connaître la clé privée. Ce n'est peut-être pas un problème du point de vue des spammeurs qui volent votre liste de distribution, mais c'est un problème du point de vue de prétendre que vos numéros de téléphone sont stockés en toute sécurité, car cela signifie qu'une attaque par force brute devient possible: il n'y a que quelques milliards les numéros de téléphone, et il peut être possible de les réduire considérablement pour un utilisateur donné.

Désolé, cela ne répond pas directement à votre question: je ne sais pas s'il existe un framework PHP qui aidera à implémenter la séparation des privilèges.

[Modifier pour ajouter: en fait, il me semble que sous le titre "Garder l'application privilégiée simple", vous pourriez ne pas vouloir utiliser un cadre du tout. Cela dépend en quelque sorte de savoir si vous pensez être plus ou moins susceptible de laisser des bogues dans la petite quantité de code dont vous avez réellement besoin, que les auteurs du framework doivent laisser des bogues dans la quantité de code beaucoup plus grande (mais plus largement utilisée) qu'ils ai écrit. Mais c’est une énorme simplification excessive.]

Autres conseils

Etant donné que vous devez pouvoir récupérer les numéros de téléphone, la seule chose que vous pouvez vraiment faire pour les protéger (au-delà de ce que vous feriez normalement pour protéger votre base de données) est de les chiffrer. Cela signifie que vous devez:

  • Assurez-vous que la clé ne fuit pas lorsque vous distribuez par inadvertance un vidage de la base de données.
  • Assurez-vous que votre système ne décrypte pas facilement les numéros de téléphone lorsqu'un utilisateur parvient à utiliser SQL injecte votre système.

Bien sûr, la recommandation de ne pas rouler vous-même s’applique quand même, utilisez AES ou un autre chiffre bien respecté avec une longueur de clé raisonnable.

J’ai le plaisir d’annoncer la sortie du système de sécurité des trous pour PHP

Ce projet signifie apporter à PHP le type de sécurité fourni en Java par Spring Security, anciennement Acegi Security System for Spring. Il a été conçu pour attirer les utilisateurs de Spring Security, car sa philosophie est la même. C’est un moyen peu intrusif d’ajouter de la sécurité à un site PHP. La configuration est réalisée en utilisant le substrat IoC / DI en tant que Spring Security et en utilisant Spring IoC / DI.

Un exemple de configuration est fourni avec la structure et peut être utilisé comme suit:

$context = new substrate_Context(
    './path/to/hole-security/hole-security-config.php'
);

$context->execute();

$hole_Security = $context->get('hole_FilterChainProxy' );
$hole_Security->doFilter();

Assurez-vous simplement que le code d'amorçage du framework est exécuté avant l'amorçage du MVC de votre choix.

Site Web: http://code.google.com/p/hole-security/

Documentation: Pour le moment, vous pouvez utiliser la documentation de référence de Spring Security lorsque celle-ci s’applique. Vous pouvez vous faire une idée générale en utilisant la documentation de référence d’Acegi Security car la sécurité par trou utilise le même mode de configuration, mais gardez à l’esprit que cela est basé sur Spring Security.

Licence: Il est publié sous la licence Apache Version 2.0.

Caractéristiques: hole-security apporte un système de sécurité enfichable où vous pouvez adopter les exigences de sécurité de votre environnement. Il existe actuellement un système de sécurité très simple, car il figure dans la première version, mais avec la base de base qu'il apporte, vous pouvez suggérer ou demander l'ajout de nouvelles fonctionnalités au projet.

Fonctionnalités actuelles:

  1. Dans l'authentification de mémoire de calcul en guise de preuve de concept, vous pouvez passer à votre dao préféré ou à votre implémentation qui récupère les données utilisateur de la base de données ou à n'importe quel endroit où vous les stockez. Dans les versions à venir, une implémentation basée sur le PDO sera créée.

  2. Filtres configurés pour être appliqués aux modèles d'URL. L’adaptateur de chemin d’URL peut être branché, il est actuellement livré avec un adaptateur de chemin de styles ant.

  3. Le gestionnaire d'autorisations peut être utilisé dans votre application pour décider si vous voulez ou non faire quelque chose, en obtenant toujours la référence dans le contexte du substrat.

  4. Contexte de sécurité partagée accessible depuis n'importe quel code de votre application si hole_HttpSessionContextIntegrationFilter est appliqué. Vous pouvez utiliser ce contexte pour enregistrer des informations relatives à la session sans utiliser directement l'objet de session.

  5. Vous pouvez utiliser une page de connexion personnalisée et la personnaliser en fonction de la configuration de hole_AuthenticationProcessingFilter ou personnaliser hole_AuthenticationProcessingFilter en fonction de votre page de connexion personnalisée.

  6. L'encodeur de mot de passe par défaut est du texte brut, sans encodage. Les futures versions auront des implémentations pour l'encodage MD5, basé sur Sha, Base64 et autres. Vous pouvez créer votre propre encodeur de mot de passe et être configuré.

  7. Tous les objets sont chargés en fonction des besoins. Si quelque chose comme un filtre n'est pas utilisé pour une demande, il ne serait pas chargé. Cela augmente les performances de l'application Il existe d'autres fonctionnalités liées à la sécurité des trous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top