Je suis un débutant en PHP. p>
Ce que j'essaie de faire est d'arrêter de poster des données provenant d'une autre page Web. P>
Le problème que je dois dire, disons que quelqu'un copie ma forme et la colle sur leur site Web. Je veux pouvoir arrêter cette publication des données d'exécuter le script sur mon formulaire de messagerie. P>
Comment puis-je faire cela? Faites-moi savoir si je ne suis pas assez clair. P>
Mon formulaire de contact PHP fonctionne sur une page avec des déclarations conditionnelles. I.E. Si les données vérifient, soumettez. P>
6 Réponses :
$ _ serveur ['http_referrer'] serait bien mais ce n'est pas fiable. Vous pouvez utiliser un champ de formulaire caché que MD5 est quelque chose et que vous le vérifiez de l'autre côté. P>
Et si je faisais randomisé le nombre et l'avez posté comme une valeur cachée, mais cela change.
Oh, attendez, ils peuvent simplement supprimer cette valeur cachée et le faire fonctionner .... lol. Dangit, juste quand je pense que je reçois les poignées de PHP.
Je pense que je l'ai finalement compris, j'ai utilisé Session_Start, a fait une variable de sessions lorsque le formulaire a été affiché, puis vérifié si la variable était définie pour soumettre!
Utilisez-vous des sessions de côté serveur?
Non, je n'utilise pas les sessions latérales du serveur. Et ma logique ci-dessus n'a pas marché. Désolé les gars.
Le seul problème quand je suis MD5 ma chaîne est que la personne peut saisir cette valeur cachée et la placer sur leur site. Cela ne fonctionnera que temporairement jusqu'à ce qu'une nouvelle chaîne soit générée sous la valeur cachée. En d'autres termes jusqu'à ce que quelqu'un rafraîchit la page.
Vous avez compris comment utiliser le référateur HTTP de cette page: Trap17.com/index.php/...
Vous ne pouvez pas faire confiance à http_referrer cependant, il est facilement spoofé.
Oui, j'utilise également le champ caché randomisé et je le contrôle avant de soumettre en utilisant des sessions. Toute autre idée utile pour vérifier l'identité de l'utilisateur unique et prévenir la CSRF?
Sans blague, à propos de spoofing facilement le référateur HTTP - j'ai utilisé le Firefox Ajouter sur: addons .Mozilla.org / fr-US / Firefox / Addon / 953 et a rapidement nettoyé le référateur, merci pour la tête!
Oh ok, je pensais que tu voulais dire que tu n'étais que vérifier le référent.
Si vous recherchez une approche rapide et sale, vous pouvez vérifier l'en-tête de référateur.
Si vous voulez vraiment vous assurer que le formulaire a été récupéré de votre site cependant, vous devriez générer un jeton chacun Le temps est chargé et joignez-le à une session. Un moyen simple de faire ce serait quelque chose comme: p> alors votre formulaire peut avoir une entrée cachée: p> et vous pouvez vérifier que lorsque vous décidez de traiter vos données de formulaire. p> p>
Avez-vous même besoin de vérifier le jeton en $ _post? Pourquoi ne pas simplement vérifier si la valeur de $ _session est toujours définie?
Vous essayez d'empêcher CSRF - Demande de cross-sites Falsification . Jeff lui-même a un article de blog à ce sujet. P>
La prévention TRUE XSRF nécessite trois parties: p>
sous la forme:
$password = "mypass"; //same as above
if ($_POST['iphash'] == md5($password . $_SERVER['REMOTE_ADDR'])) {
//fine
}
else {
//error
}
Remote_Addr peut être spoofed, donc s'il y avait une attaque MITM, cela serait sans valeur. En outre, après avoir fait une demande unique, je pouvais facilement faire plus en double duplication du hachage, qui rendrait cela sans valeur, la partie «unique» du hachage doit être plus «unique», c'est pourquoi j'ai choisi d'utiliser le temps () Sorcière fournit l'heure actuelle de l'époque.
L'attaquant n'est pas le client, son autre serveur servant une page de formulaire à ses clients i>.
De toute façon, cela peut encore arriver aussi facile.
Je crois que le même commentaire Ajax-Chargement à distance sur la réponse d'Unkwntech s'applique également à cela. La véritable protection XSRF nécessite des cookies, une entrée de forme cachée et des considérations sur le temps-epsilon.
étape 1: strong> désactiver l'encadrement de la page ( Donc, si vous êtes sur une plate-forme personnalisée, ce qui n'a pas de méthodes de validation temporaire intégrées, puis mettez en œuvre votre approche. Un concept simple: p> (le code de cryptor est ici ) em> p> sur soumission, cochez: p> .php code>), dans lequel le formulaire est généré, dans le sommet Ajouter: P> XXX PRE>
asp.net code> Les formulaires intégrés utilisent une entrée dynamique gtlkjh29f9ewduh024cfvefb code>) li>
WordPress code> Les formulaires intégrés utilisent une entrée dynamique 340297658942346 CODE>) LI>
ul> if(!empty($_POST)){
// If REFERRER is empty, or it's NOT YOUR HOST, then STOP it
if( !isset($_SERVER['HTTP_REFERRER']) || parse_url($_SERVER['HTTP_REFERRER'])['host'] != $_SERVER['HTTP_HOST'] ){
exit("Not allowed - Unknown host request! ");
}
// Now, check if valid
if ( Cryptor::decrypt( $_POST['temp_random'], $_SERVER['REMOTE_ADDR'] . $secret_key) < time() - 60* 15 ) {
exit("Not allowed - invalid attempt! ");
}
...........................................
... Now, you can execute your code here ...
...........................................
}
Bien sûr, c'est la réponse la plus précise.
Chaque utilisateur fait de l'inscription, puis obtenez un identifiant de connexion.
Suivant est un algorithme pour empêcher le CSRF: - P>
1) any json file with $refkey exists at server? 2) If $refkey exists, then check $login_id, $a_secret_key and $remote_addr exists and are correct.
J'ai aussi essayé de vérifier l'URL en PHP, mais j'ai découvert que c'était une erreur amateur.
D'accord. J'ai regardé ce que vous m'avez donné, et j'ai pensé à une idée différente en utilisant ce que vous m'avez donné ... Et si je randomisez un ensemble de caractères => converti en une variable, posté comme la valeur cachée Donc, cela change à chaque fois et vérifiez que lorsque mon script fonctionne?
Erreur amateur à nouveau ..... Désolé.
Merci tout le monde! n'aurait pas pu le faire sans l'aide de tout le monde!