7
votes

PHP - chiffrer le nom d'utilisateur et le mot de passe d'autre site

Je programmment un site PHP qui permet aux utilisateurs de vous inscrire, et les utilisateurs enregistrés et non enregistrés peuvent entrer leurs noms d'utilisateur et mots de passe respectifs (par exemple smith8h4ft - j9hsbnuio ) pour Site scolaire.

Ensuite, mon script PHP envoie certains $ _ Post variables, téléchargements et analyse de la page Marques, faisant appel à une matrice: MarkSDB = Array ("Sujet" => Array ("A", "B", "A", "C", ...) , et l'écrit reformaté.

Ma question est la suivante: Comment dois-je garder le nom d'utilisateur et les mots de passe en sécurité?

Pour les utilisateurs non enregistrés, je oublie actuellement le nom d'utilisateur et le mot de passe et mettez le marksdb dans $ _ session . Lorsque l'utilisateur est inactif pour E.G. 30 minutes, MarkSDB est supprimé. Quelle est la sécurité de ces données dans _ session ? Et que diriez-vous des utilisateurs qui se connectent, affichent une fois la page et ne le visuez jamais, alors le script ne supprime pas le markSDB de la session? La session est-elle supprimée automatiquement ( gc.maxlifetime < / a>)?

Et qu'en est-il des utilisateurs enregistrés? Je veux avoir tout de sécurité, mais je ne veux pas ennuyer l'utilisateur avec des invites de mot de passe toutes les 30 minutes d'inactivité. Est-il sécuritaire de chiffrer les informations d'identification telles que décrites Ici , mais sans le troisième mot de passe de l'utilisateur? Ou dois-je demander à l'utilisateur son mot de passe à chaque fois?

EDIT:

merci pour des réponses rapides,
@Justin ᚅᚔᚈᚄᚒᚔ: Je doute qu'ils ont une API, mais je peux leur demander, juste pour le cas @Abid Hussain: Merci de liens très utiles. (Merci aussi pour les réponses).
Je vais jeter les informations d'identification des utilisateurs et ne disposerez que markdb , que je vais probablement jeter (après la déconnexion ou l'inactivité) - il est bon marché de récupérer des marques à nouveau en cas de besoin.


1 commentaires

Le seul gros risque ici est la session du détournement, imo. Vous pouvez régénérer la session ID lorsque le privilège est modifié.


5 Réponses :


-1
votes

Le fichier de session est le côté serveur afin qu'il soit invisible pour les clients. Mais ils peuvent toujours affecter votre programme à utiliser une autre session si elles connaissent l'ID de la session.

Pour les utilisateurs enregistrés, vous pouvez stocker le mot de passe dans un dB ou un fichier après avoir chiffré une clé avec une clé que vous savez que vous savez (peut-être une nouvelle génération générée au hasard et stockée pour chaque utilisateur)


4 commentaires

Non; Vous ne devriez pas chiffrer un mot de passe. Vous devriez hash it - donc même votre propre application ne peut pas l'inverser.


@Andrewbarber mais comment peut-il l'envoyer à l'autre site, à moins qu'il n'utilise aussi le même hachage aussi?


Tu viens de répondre à ta propre question.


Ensuite, la réponse est: "Vous gardez les informations d'identification des utilisateurs en sécurité en ne faisant pas ce que vous faites". En fait, l'OP violait la sécurité des utilisateurs en premier lieu en leur demandant des informations d'identification pour un autre site .



0
votes

Les fichiers de session seront supprimés par le collecteur des ordures après un certain temps, mais une bonne règle de stockage de _session ne stocke que des données que vous souhaitez émettre à l'écran, c'est-à-dire que le mot de passe est Probablement pas quelque chose que vous voulez stocker à la session. Les fichiers de session peuvent être lus à partir du serveur et il est possible que certains utilisateurs néfastes puissent détourner la session et voir des choses qu'ils ne sont pas censées voir ou même voir un var_dump ($ _ session) . .

Si vous souhaitez permettre aux utilisateurs enregistrés des sessions plus longtemps, vous pouvez accomplir une page de page périodique avec JS (pas nécessairement pour rafraîchir la page .. Juste une demande asynchrone fera) ou peut-être même augmenter le temps de la session avec ini_set Si accepté. Ce n'est pas nécessairement plus sûr de demander des mots de passe à plusieurs reprises. Cela dépend de la vulnérabilité du mot de passe lorsque vous vous demandez.

Une autre solution consiste à avoir le cookie infâme "Se souvenir de moi" Gardez les utilisateurs connectés.

Les mots de passe ne sont pas pour le déchiffrement. Chiffrer pour le secret. Hachage pour l'authentification.


0 commentaires

0
votes

Tout dans la session est le serveur, il n'est donc pas accessible par d'autres. Cependant, les sessions peuvent être «détournées» comme expliqué ici .

Vous pouvez augmenter la longueur de la session dans votre php.ini ou utiliser des appels périodiques Ajax en état de fond pour garder la session en vie. Les sessions sont supprimées lorsqu'elles sont expirées par le serveur.

crypter un mot de passe afin qu'il puisse être déchiffré est généralement fronçonné sans cesse sauf s'il n'y a pas d'alternative. Avec cryptage, non seulement vous, mais également tout le monde avec accès à votre base de données et / ou code source peut récupérer les mots de passe.


0 commentaires

0
votes

Voir URL

http://phpsec.org/projects/guide/4.html

http: // www. Sitepoint.com/blogs/2004/03/03/notes-on-php-session-Security/

http://talks.php.net/show/phpworks2004-php -Session-Security

http://segfaullabs.com/files/pdf/php-session -Security.pdf

moyen le plus sûr de créer des sessions dans PHP

a également lu

Les sessions sont significativement plus sûres que, disent, cookies. Mais il est toujours possible de voler une session et donc le pirate informatique aura un accès total à ce qui est de cette session. Certaines façons d'éviter ceci sont la vérification de la propriété intellectuelle (ce qui fonctionne plutôt bien, mais est très faible et n'est donc pas fiable en soi) et utilise une nonce. Typiquement, avec une nonce, vous avez un "jeton" par page de sorte que chaque page vérifie que la dernière page de la page correspond à ce qu'elle a stockée.

Dans l'une ou l'autre des vérifications de sécurité, il existe une perte de convivialité. Si vous effectuez une vérification IP et que l'utilisateur est derrière un pare-feu intranet (ou une autre situation qui cause cela) qui ne contient pas de propriété intellectuelle constante pour cet utilisateur, ils devront se rééditer chaque fois qu'ils perdent leur IP. Avec une nonce, vous obtenez le toujours amusant "en cliquant sur le dos entraînera une pause" de la situation.

Mais avec un cookie, un pirate informatique peut voler la session simplement en utilisant des techniques de XSS assez simples. Si vous stockez l'identifiant de la session de l'utilisateur comme cookie, ils sont également vulnérables à cela. Donc, même si la session n'est pénétrable que de quelqu'un qui peut faire un piratage de niveau serveur (qui nécessite des méthodes beaucoup plus sophistiquées et généralement une certaine quantité de privilège, si votre serveur est sécurisé), vous aurez toujours besoin d'un niveau supplémentaire de vérification. sur chaque demande de script. Vous ne devez pas utiliser les cookies et Ajax ensemble, car cela en fait un peu plus facile d'aller totalement en ville si ce cookie est volé, car vos demandes Ajax peuvent ne pas obtenir les contrôles de sécurité sur chaque demande. Par exemple, si la page utilise une nonce, mais la page n'est jamais rechargée, le script ne peut être vérifiant que cette correspondance. Et si le cookie tient la méthode d'authentification, je peux maintenant aller en ville à faire de ma malheur à l'aide du biscuit volé et du trou Ajax.


0 commentaires

1
votes

Si le site scolaire n'expose pas une API pour cela (par exemple, Utiliser Oauth comme les sites Stackexchange font ), alors vos options sont limitées.

En règle générale, Il n'est jamais judicieux de garder les informations d'identification en clair de l'utilisateur plus longtemps que ce qui est absolument nécessaire . Il existe des implications de sécurité pour toute façon possible que vous puissiez imaginer d'essayer de le faire (détournement de la session, clés volées, déchiffrement, etc.).

Une meilleure approche pourrait être de rendre le processus de téléchargement de marque strictement initié par l'utilisateur. Donnez-leur un bouton qui dit "Récupérer mes marques" et passerai le processus d'authentification, téléchargez les marques et jetez leurs informations d'identification. Chaque fois qu'ils "synchronisent", ils devraient avoir à authentifier. À moins que les marques ne changent de base périodique fréquente, il ne devrait pas y avoir aucune raison pour ne pas pouvoir télécharger toutes les informations dont vous avez besoin à la fois, puis le mettre en cache de manière sécurisée sur le serveur pour une utilisation ultérieure.


0 commentaires