2011-12-22 3 views
1

Je suis en train de mettre en place un système de vote comme Stackoverflow. Comment est-ce que je peux l'implémenter alors c'est une preuve de piratage?Système de vote hack proof

J'ai un peu de PHP qui fonctionne avec la base de données en fonction de la requête ajax envoyée après le javascript. Est-ce que faire une requête pour vérifier l'état actuel du vote d'un utilisateur suffirait à éviter les votes non autorisés?

+4

Toute grave "épreuvage pirater" devrait avoir lieu sur le côté serveur, donc je suppose que vous devriez poser la question au lieu –

+2

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

+0

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

Répondre

7

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.

+1

CSRF? Clickjacking? vous obtenez un -1. – rook

+0

Ceci est votre droite :-) –

+2

C'est un point assez saillant cependant. +1 à @Rook. Bien que votre réponse soit excellente, toutes les réponses n'ont jusqu'ici porté que sur un comportement d'utilisateur relativement légitime et honnête, se concentrant principalement sur l'arrêt des votes en double. Vous devez également réfléchir à la façon d'empêcher le système d'être manipulé par des utilisateurs mal intentionnés qui volent les votes des autres, avant qu'ils n'aient la possibilité de voter (intentionnellement) eux-mêmes. Si je peux faire en sorte que 10 000 utilisateurs votent en mon nom, sans qu'ils se rendent compte qu'ils le font, je n'ai pas besoin de votes en double pour jouer les résultats. – Cheekysoft

0

NOTE: CECI EST UNE RÉPONSE AU ORIGINAL QUESTION
Ne pas la déprécier juste parce que le PO a radicalement changé sa question.


Il y a une énorme erreur même penser que de compter sur des composants côté du navigateur pour appliquer la logique d'application. Javascript doit être utilisé, dans des environnements non approuvés, exclusivement à des fins de présentation.

Toute la logique de l'application doit être implémentée, validée et appliquée côté serveur.

+0

Pour les downvoters: la question originale était totalement différente - elle demandait des commentaires sur un script JS "anti-piratage" (oui, vous avez bien lu). [Cliquez ici] (http://stackoverflow.com/posts/8603285/revisions) pour voir l'original par vous-même. – CAFxX

+0

Je n'ai certainement pas demandé cela: P –

+0

@amiawizard bien, je pense que vous l'avez fait. Vous avez tagué votre question avec "php, ** javascript, xss, jquery **" et vous avez posté un extrait de ** javascript ** demandant des commentaires à ce sujet ** ("Cela vous semble-t-il spaghetti?"). Pardonnez-moi, mais si ce n'était pas une question à propos de javascript alors c'était horriblement formulé. – CAFxX