PHP Captcha sans session
Ok, voici une question: dans le projet sur lequel je travaille, nous ne pouvons pas compter sur le serveur-côté sessions pour toute fonctionnalité.
Le problème est que la commune captcha solutions de prévention de la robotique soumet besoin de session pour stocker la chaîne de match captcha contre.
La question est - est-il possible de résoudre le problème sans l'aide de séances? Ce qui me vient à l'esprit est de servir caché champ de formulaire, contenant certains de hachage, avec captcha champ de saisie, de sorte que le serveur peut alors correspondre à ces deux valeurs. Mais comment faire pour que cette méthode sécurisé, de sorte qu'il ne pouvait pas être utilisée pour briser les captcha facilement.
Je voudrais poser la même session. Aussi les séances ne signifie pas d'identification de l'utilisateur. Votre script PHP devient apatride. Qu'est-ce que captcha dans ce système?
ils ont mis de connexion en GET ou POST variables 😉
Peut-être que c'est juste pour envoyer un formulaire "nous contacter".
OriginalL'auteur Anton N | 2009-09-23
Vous devez vous connecter pour publier un commentaire.
La nécessité pour la session ou de la base de données provient de la nécessité de coordonner les OBTENIR pour l'image avec la page html contenant, alors que diriez-vous d'utiliser le même code pour intégrer un captcha image: [img src= " data:image/jpeg;base64,...'], utilisez un hasard sel de hachage son texte, puis l'envoi de l'aléatoire, de sel et de hachage avec l'image du client dans un seul OBTENIR?
Sur la publication d'ajouter le texte utilisateur pour le sel puis de comparer les tables de hachage. Je me demandais comment sûr ce serait...
OriginalL'auteur Costas
Utiliser le pot de miel technique: placer un champ de texte avec une gourmande nom, 'email', dans un champ caché par CSS (display: none; visibility: hidden;).
Lorsque vous avez pour assainir le formulaire, il suffit de vérifier si ce champ est vide, est en cours d'envoyer par un humain (qui ne peux pas le voir, le champ et cant le remplir), sinon, à partir d'un spammeur.
C'est pourquoi généralement spammeur utiliser pour remplir tous les champs dans la page avec predefinited valeurs avant l'envoi du formulaire... et de ne pas déranger l'utilisateur pour lire le captcha.
D'autre, s'appuyer sur le lecture humaine, quelque chose comme "Écriture de la première tranche de x lettre du mot "$mot" dans le champ:"
Ensuite, vous n'avez qu'à envoyer la valeur de $x et $mot à la page suivante et de le vérifier (et bien sûr, vous pouvez vous rendre aléatoire le nom des champs pour être plus accurated)
Je me souviens qu'un plugin pour phpBB forum compter sur le fait que, généralement, les robots de spam sélectionne la première option disponible (avec une valeur) dans le
<select>
champs; il suffit de mettre comme première option<option value="kickmeplease">Yes, im a bot.</option>
Il existe de nombreuses façons de se protéger contre les robots des spammeurs, en jouant sur un seul facteur que les bots n'auront jamais: l'imagination
OriginalL'auteur Strae
Vous pouvez essayer de ranger un tas de codes captcha dans une base de données. Sinon, il y a une belle discussion sur un autre captcha méthodes ici: Pratique de la non-image CAPTCHA approches?
très intéressants techniques vraiment, lisez.
OriginalL'auteur Evernoob
Ont le CAPTCHA générateur de retourner une image, et d'utiliser un salée de hachage ou de la coutume de hachage pour la réponse (l'accent sur salé/personnalisé). Ont le générateur de pousser que de hachage dans un cookie. Le serveur peut alors valider basée sur la valeur dans le cookie. Ce ne serait pas besoin de JavaScript, mais si les cookies sont désactivés, vous auriez à revenir à une autre technique.
c'est une bonne idée, mais je pense qu'il n'est pas sûr. L'attaquant pourrait utiliser un connu de hachage pour un résultat connu (e.g d9a263b9de1023a8cc... = "928137"), de modifier le champ caché et le soumettre avec le résultat connu. Contournant ainsi le captcha.
c'est pourquoi vous avez besoin de saler votre hash 😉
L'attaquant pourrait utiliser un sait salé de hachage (découverte de la source html) pour un résultat connu (découvert en regardant l'image captcha).
si vous me donnez un salée de hachage sur le source HTML comme un caché d'entrée, et vous aussi me donner respectifs captcha comme une image, ce qui ne m'empêche de "relecture" exact de hachage avec le captcha valeur à chaque fois que j'ai besoin de contourner le captcha?
OriginalL'auteur Dan
Auto-alimenter un UUID du CAPTCHA avec l'utilisateur de réponse dans le POST. Facile comme bonjour.
OriginalL'auteur Chad Brewbaker
juste faire un math captcha 😉 2+90 = ? l'équation devrait être montré dans une image et le tour est joué 😉
OriginalL'auteur Rizerzero
Faire de votre champ caché juste une séquence aléatoire. Stocker ces données aléatoires dans la base de données avec le captcha de l'information, de sorte que vous pouvez regarder dans le bon captcha avec elle.
Vous devrez également créer un court-ish de temps à vivre pour chaque captcha généré. Enfin, vous pouvez stocker et suivre dans la base de données le nombre de tentatives sur chaque captcha et d'imposer une limite dure (3 essais et c'est un échec permanent).
OriginalL'auteur Rik Heywood
Sans état persistant côté serveur, je ne vois pas un CAPTCHA de travail.
Ce que vous avez proposé n'est pas sécurisé car un attaquant pourrait facilement toujours POSTER son propre champ caché " avec appariement texte CAPTCHA.
Pourquoi ne pas faire le CAPTCHA à partir d'un autre serveur web où vous pouvez avoir un état persistant?
Il offre en effet un niveau de sécurité supplémentaire, mais je crains que le sel ne sera pas suffisamment aléatoire. Une chose à considérer est le niveau de sécurité dont vous avez besoin. Si vous avez besoin d'une certaine sécurité, mais la probabilité de devenir la cible d'une attaque est faible, vous pourriez essayer de bas de méthode de sécurité.
OriginalL'auteur Yannick Motton
Pouvez-vous leur accorder un certificat du client en réponse à un CAPTCHA appel? Ensuite, une fois qu'elles sélectionnez le certificat dans le navigateur, il est envoyé à chaque appel du client, et peut être utilisé pour l'authentification sans sessions et sans CAPTCHA appels.
C'est un type semblable de certificat, mais il est détenu par le client au lieu du serveur. Avec SSL, le serveur présente un certificat et le client l'accepte. Avec des certificats clients, c'est l'inverse - le client présente (via le navigateur) et le serveur web accepte. Une fois que vous prenez un certificat client sur le navigateur web côté, que le certificat est envoyé avec chaque appel (Demande["ClientCertificate"] ou quelque chose du genre), de sorte que vous n'avez pas à garder l'état de connexion de session. Il ne s'ajouter des cerceaux pour le client à passer à travers, cependant, et peut ne pas fonctionner pour vous.
OriginalL'auteur quillbreaker
Voici mon point de vue (sry si cela semble compliqué):
sur demande de page:
$crypt = encrypt($captcha_code, 'mot de passe')
sous la forme:
l'captcha.php page déchiffre le texte chiffré, et génère l'image.
l'utilisateur soumet un formulaire avec le code 'abcdaa' (et caché d'entrée $crypte)
edit:
la fonction de crypter doit être réversible (déchiffrer), depuis le captcha image generator aurez besoin du code d'origine.
N: pas exactement, si les modifications de mot de passe (il suffit d'ajouter un sel basé sur des renseignements disponibles, comme adresse IP de l'utilisateur, le courant de la journée, navigateur info, ou quelques autres trucs)
Je crois que c'est pire que ce que Anton N suggéré dans la première place. Utiliser une table de hachage, évidemment! hidden_field=hash(captcha + sel) et de vérifier par hidden_field == hash(user_inputted_captcha + sel).
M. Le problème réside sur le fait que la génération d'image script a besoin de savoir ce texte du code à générer à la première place. sans l'utilisation côté serveur de session/db, le texte doit venir de quelque part...
La génération d'image est côté serveur, et un hachage du texte + sel est uniquement pour vérifier le résultat par la suite. La chose à propos de chiffrement est, si un attaquant peut la briser, ils ont le texte + le mot de passe. Alors qu'ils ne peuvent pas "casser" la table de hachage, ils ne peuvent trouver d'éventuelles collisions.
OriginalL'auteur J.C. Inacio
Comment sur cette solution? J'ai trouvé cette "Sessionless PHP Captcha" article sur google et je l'ai utilisé sur un de mes projets, c'est simple, pas de session et c'est gratuit. Toute préoccupation de sécurité sur la RC4?
http://www.mythos-rini.com/blog/archives/732
OriginalL'auteur userb00
Ma propre idée, je ne sais pas c'est bon:
1) Si l'utilisateur est connecté, il suffit d'utiliser certains de hachage fonction de son login et de générer des CAPTCHA avec elle,
2)si c'est le formulaire d'inscription, etc seulement de hachage de la valeur de champ de formulaire (par exemple de connexion, lorsque l'utilisateur a fini de le taper) et par ajax montrer CAPTCHA avec pommes de connexion.
Espère que c'est compréhensible. 🙂
EDIT:
Sans AJAX:
2 les étapes de l'inscription:
À 1, nous recueillons de connexion etc. après la soumission, nous direct à
?login=new_login
À 2, nous avons caché entrée avec
GET["login"]
et le hachage de l'image du CAPTCHA - après la soumission, nous avons tous pour vérifier la réponse.Les Bots ne passera pas de captcha, à moins que ils savent vous de hachage de connexion 🙂
Oui, mais de vrais clients, qui ne peuvent pas faire des appels ajax n'auront pas leur chance de réussir?
OK j'ai idée, cochez la case "modifier" 😉
Eh bien, je l'aime, surtout combiné - faire captcha à la volée pour ajax clients et utiliser le plan b à deux pas de toutes les autres. Prendra cette méthode en considération 🙂
OriginalL'auteur IProblemFactory
Formulaire avec validation:
De générer des images comme tout autre captcha:
Télécharger les fichiers de démonstration à partir de ce lien:
Créer un Sessionless Captcha en PHP
OriginalL'auteur Carl