Autoriser l'accès au fichier PHP uniquement par le biais de l'ajax sur le serveur local
J'ai un site web qui a besoin d'incrémenter les valeurs dans une base de données basée sur l'interaction de l'utilisateur. Lorsque les utilisateurs cliquent sur un bouton d'un script php est appelé que l'incrémentation de la valeur. J'aimerais protéger ce script accès par l'extérieur des scripts. Actuellement, un utilisateur peut écrire sa propre page web avec une fonction javascript qui frappe le même fichier php à plusieurs reprises de faire exploser la valeur dans la base de données.
Voici mon code jquery qui ne l'incrémentation:
jQuery(function(){
$('.votebtn').click(function(e){
var mynum = $(this).attr('id').substring(0,5);
$.ajax({
url:"countvote.php",
type:"GET",
data: {
thenum:mynum
},
cache: false,
success:function(data) {
alert('Success!');
}
}
});
});
});
Comment pourrais-je aller sur le faire afin que seulement un appel de l'ajax/jquery sur le serveur local peut accéder 'countvote.php'? Si ce n'est pas la bonne façon d'aller à ce sujet, je suis ouvert à toute suggestion qui permettrait d'éviter que mon script php d'être abusé par l'extérieur de scripts.
C'est trivial à forger en dehors du navigateur avec
wget
OriginalL'auteur LoneWolfPR | 2013-03-15
Vous devez vous connecter pour publier un commentaire.
La solution a besoin de deux étapes.
Tout d'abord l'ajax fichier doit permettre l'accès seulement à une requête ajax avec ce code.
Deuxièmement, l'ajax fichier a accès dans le nom de fichier de l'appeler avec la commande $_SERVER['HTTP_REFERER'].
Ainsi, vous pouvez restreindre l'accès au serveur hôte.
Peut-être que le code ne peut fonctionner qu'avec la deuxième partie
Cela ne fonctionne pas. N'importe qui peut envoyer un X-requested-with et de l'en-tête Referer avec quelles que soient les valeurs qu'ils aiment.
alors, quelle est votre solution pour résoudre les exigences? Un secret donné sur le initalsite?
Il n'y a pas une solution.
OriginalL'auteur user3058968
Vous pouvez vérifier si
$_SERVER['HTTP_X_REQUESTED_WITH']
est égal àxmlhttprequest
, mais ce n'est pas une méthode fiable pour déterminer si une requête est une requête AJAX ou pas, il ya toujours un moyen de contourner ce problème. Mais il vous protège des coups aléatoires comme mal entré url, robots etc.OriginalL'auteur cara
Theres pas vraiment à 100% méthode de le faire. Les requêtes AJAX sont toujours à venir à partir d'un client. Utiliser des requêtes POST au lieu de GET et qui contribue à dissuader les éventuels problèmes, mais pas complètement arrêter et dans votre php, il suffit de déposer toutes les requêtes get.
Cochez cette réponse pour résoudre ce problème. stackoverflow.com/questions/12506897/...
Si je ne me trompe, je pense que vous avez besoin de JQuery 1.5 ou version ultérieure pour utiliser le contrôle d'en-tête. Malheureusement, je paralysées en utilisant 1.3 qui ne prend pas en charge cette. Il fait partie d'un CMS que je n'ai pas la possibilité de mettre à jour actuellement. Merci bien.
Pouah, suce mec. Désolé, je ne pouvais pas les aider. J'espère que vous trouverez votre solution!
OriginalL'auteur castis