Il est certainement possible d'implémenter une solution assez fiable. Mais ce doit être fait côté serveur.
Règle de sécurité de base: vous ne faites pas confiance aux données du client.
Déplacer tous vos chèques à PHP et rendre votre javascript aussi stupide que
$(".vote").click(function(e) {
$.post('/vote.php', vote_data, function(result) {
// update UI according to returned result
}
}
Il est cependant une chose commune, à faire encore des contrôles sur le client, mais comme un moyen d'améliorer la facilité d'utilisation (marque formulaire requis champs qui n'ont pas été remplis) ou réduire la charge du serveur (en n'envoyant pas de données manifestement incomplètes). Ces vérifications de client sont pour le confort de l'utilisateur, pas pour votre sécurité.
Répondre à votre question mise à jour:
Si vous stockez journal complet quand l'utilisateur qui ont voté pour quelle question, alors oui, il est assez facile d'éviter les votes multiples (lorsque l'utilisateur peut voter pour la même chose plusieurs fois). En supposant, bien sûr, que les votes anonymes ne sont pas autorisés. Mais si vous avez un site populaire, ce journal peut devenir très gros et être un problème. Certains systèmes tentent de s'en tirer en désactivant le vote sur les anciens articles (et en supprimant les entrées de journal correspondantes). Et si quelqu'un essayait intentionnellement de me pirater?
Il existe différents types d'attaques qu'un utilisateur malveillant peut effectuer.
CSRF (cross-site request forgery)
L'article énumère quelques méthodes pour prévenir l'attaque. Moderne Ruby on Rails a la protection intégrée, activée par défaut. Je ne sais pas comment c'est dans le monde PHP.
Clickjacking
Cette attaque astuces d'utilisateurs à cliquer sur quelque chose qui est pas ce qu'ils pensent.Par exemple, ils peuvent cliquer sur "Lire la vidéo", mais le site interceptera ce clic et publiera sur le mur de l'utilisateur à la place.
Il existe également des articles sur le Web.
Toute grave "épreuvage pirater" devrait avoir lieu sur le côté serveur, donc je suppose que vous devriez poser la question au lieu –
Le hack-proofness est * toujours * fait sur le serveur, pas sur le client. Votre JavaScript peut être manipulé/désactivé par * n'importe qui *. Votre code PHP ne peut pas. – Matt
La chose la plus importante à garder à l'esprit est que, bien que la validation frontale soit utile pour la présentation et la réduction des requêtes du serveur, ce n'est pas un endroit approprié pour la validation de base. Utilisez votre code php pour valider les votes. – CBusBus