1

Voilà, j'ai monté une page perso de quotes IRC type Bashfr.org. Tout marche plus ou moins bien, sauf le système de notations... Enfin si, il fonctionne, mais de sombres crétins ont évidemment découvert qu'il n'y avait aucune protection concernant les IP et ils faussent les scores en cliquant sur les deux notes positives et négatives...

Je réfléchis quant à la mise en place d'un tel système de protection et j'en ai conclu qu'il fallait utiliser un cookie.

Seulement voilà, l'algo m'échappe totalement sorry Peut-on en PHP4 écrire tableau[492] sans avoir déclaré ledit tableau ?

Est-ce que ça vaut le coup de mettre cette protection en place sachant que les plus cons/désespérés peuvent utiliser des proxys (sisi je vous assure que ça existe) ?

2

> Peut-on en PHP4 écrire tableau[492] sans avoir déclaré ledit tableau ?
Non.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

3

comment tu veux t'y prendre pour mettre en place une protection par cookie ? à moins de faire des comptes utilisateurs, si ton cookie ne fait qu'interdire à un utilisateur de voter à nouveau, rien ne l'empêche de supprimer le cookie entre temps ou bien de ne même pas les accepter ?

sinon pour ta question, non, mais vu toutes les horreurs qu'on peut écrire en PHP, il y a plein de solutions, tu peux faire par exemple $tableau = array (492 => 'valeur'), ou une des nombreuses autres alternatives (ou alors je n'ai pas compris le problème).

[edit] on me souffle dans l'oreillette que $tab[20] = "plop" ça marche directement, je peux pas tester, j'ai pas PHP4 ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

./2 > si ... en php on peut affecter n'importe quoi n'importe où ...
avatar
Webmaster et développeur du site. Pour tout probleme ou question envoyez un mini message ou mail.

Suivez l'actualité de tous vos site préférés sur yAronews : http://ns.yaronet.com =)

5

(22:46:16) (Vertyos) ah bah je dois confondre ac le fait que certaines fonctions ont besoin de tableaux déjà initialisés (par exemple array_push, qui est l'équivalent de [] mais qui ne marche pas si le tableau n'existe pas déjà)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

Sasume (./2) :
> Peut-on en PHP4 écrire tableau[492] sans avoir déclaré ledit tableau ? Non.

en écriture, c'est tout à fait possible - c'est même un peu comme ça qu'on fait, en général.

En lecture... c'est super moche d'accèder à une variable non initialisée...
(Et sur un serveur de développement bien configuré, ça devrait lever une notice ^^ )
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

7

Yoshi Noir (./1) :
Voilà, j'ai monté une page perso de quotes IRC type Bashfr.org. Tout marche plus ou moins bien, sauf le système de notations... Enfin si, il fonctionne, mais de sombres crétins ont évidemment découvert qu'il n'y avait aucune protection concernant les IP et ils faussent les scores en cliquant sur les deux notes positives et négatives...

Je réfléchis quant à la mise en place d'un tel système de protection et j'en ai conclu qu'il fallait utiliser un cookie.

Seulement voilà, l'algo m'échappe totalement sorry Peut-on en PHP4 écrire tableau[492] sans avoir déclaré ledit tableau ?

Est-ce que ça vaut le coup de mettre cette protection en place sachant que les plus cons/désespérés peuvent utiliser des proxys (sisi je vous assure que ça existe) ?



Bonjour,

Les cookies ne suffiront jamais (comme dit plus haut, il suffit de l'effacer, ou de le refuser).
Il faut "authentifier" si possible l'internaute qui vote (idéalement en obligeant à créer un login) et enregistrer cela dans une base => inconvénient mineur : il faut se loguer pour voter.
Si le vote ou la notation, doit se faire aussi en "anonyme", il est parfois judicieux de pondérer le vote, en faisant en sort qu'un vote anonyme compte largement moins qu'un vote authentifié.

Pour PHP, comme dit plus haut, c'est un language évolué qui accepte le transtypage à la volée. Donc écrire $tableau[492] = "TOTO", ça marche meme si $tableau n'est pas déclaré.
AUX SEULS CONDITIONS : que PHP ne soit pas en mode "strict", en ce cas il renverra un NOTICE ou une ERROR, en disant que $tableau n'est pas déclaré.
Il est évident, que dans des applications professionnelles, et dans un soucis de sécurité, il vaut mieux déclare ces variables avant.


Luis

8

Zephyr (./3) :
comment tu veux t'y prendre pour mettre en place une protection par cookie ? à moins de faire des comptes utilisateurs, si ton cookie ne fait qu'interdire à un utilisateur de voter à nouveau, rien ne l'empêche de supprimer le cookie entre temps ou bien de ne même pas les accepter ?

Argh, j'avais pas pensé à ce détail -____-
Et un $_SESSION ne suffit pas vu qu'il suffit de quitter le navigateur internet et de le relancer pour pouvoir revoter à nouveau sorry
(Javascript ? Ajax ? eeek)
squale92 (./6) :
en écriture, c'est tout à fait possible - c'est même un peu comme ça qu'on fait, en général.

Disons qu'en fait je pensais récupérer l'ip, la mettre dans un tableau de même longueur que le nombres de quotes, et vérifier l'ip après clic...
LG666 (./7) :
Il faut "authentifier" si possible l'internaute qui vote (idéalement en obligeant à créer un login) et enregistrer cela dans une base => inconvénient mineur : il faut se loguer pour voter

Sachant qu'il n'y aura en tout et pour tout que deux comptes (un compte super-admin (moi) et un compte admin pour quand je suis pas là), et que l'esprit d'un tel site consiste à pouvoir donner anonymement son avis sur une bêtise dite sur IRC, bof quoi grin
LG666 (./7) :
AUX SEULS CONDITIONS : que PHP ne soit pas en mode "strict", en ce cas il renverra un NOTICE ou une ERROR, en disant que $tableau n'est pas déclaré.

Faudra que j'essaye, oué...
LG666 (./7) :
Il est évident, que dans des applications professionnelles, et dans un soucis de sécurité, il vaut mieux déclare ces variables avant.

Sachant que cette page perso est tout ce qu'il y a de plus amateur, ce n'est pas un problème embarrassed grin

9

Yoshi Noir (./8) :
Sachant que cette page perso est tout ce qu'il y a de plus amateur, ce n'est pas un problème redface.gif biggrin.gif

en même temps, autant prendre de bonnes habitudes dès maintenant, non ?
parce que le coup de "php c'est facile, c'est accessible pour les débuttants", faut voir ce que ça donne au bout d'un moment...
Yoshi Noir (./8) :
Disons qu'en fait je pensais récupérer l'ip, la mettre dans un tableau de même longueur que le nombres de quotes, et vérifier l'ip après clic...

juste comme ça, ta variable PHP ne sera pas conservée entre deux exécutions du script, tu en es conscient ?
il te faut quelque chose pour stocker tes données (genre base de données, ou fichier (plat, xml, ...), ...)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

10

pourquoi tu utilises pas une base de données?

une table à 2 champs: IP(nombre de 32bits), date (stamp de 32 bits)

à chaque note, tu insères un couple (date, ip)

et tu configures ta table pour que le couple (date,ip) soit une clé, ce qui oblige tous les couples à être unique.

et tu prends en compte la note seulement si l'INSERT a réussi.


Mieux: Tu peux même stocker la note dans une table

(date,ip,numquote,note)

et calculer la note moyenne en SQL avec
select average(note) from notes where numquote=lenumquetuveux

note: pour l'IP tu peux obtenir un nb de 32 bits en séparant en a.b.c.d avec la fonction explode() et en faisant (a<<24)|(b<<16)|(c<<8)|d

pour la date time() te donne le nb de secondes depuis le 1/1/70, donc (int)(time()/86400) te donne le numéro du jour depuis le 1/1/70

11

Pourquoi tu veux stocker la date dans ta table ?
Et pourquoi tu ne stockes pas l'identifiant de la ressource notée ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

12

C'est quoi les identifiants de ressource? ceux filés par PHP?

je stocke la date pour véfirier qu'il n'y a qu'une entrée par jour, de manière totalement inaccessible par le client, parce qu'un cookie, etc, ça peut sauter trop simplement.

13

1. La ressource là c'est le quote en question. J'imagine qu'il les stocke dans un bdd et qu'il les identifie avec ... un identifiant.

2. Ma question était : Pourquoi tu limites les clics seulement pour une journée ? Peut-être parce que des personnes avec une IP dynamique peuvent se retrouver dans l'impossibilité de voter sinon ?

À mon avis un triplet (ip, id_quote, date) suffit alors.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

14

1>
squalyl (./10) :
Mieux: Tu peux même stocker la note dans une table
(date,ip,numquote,note)


bin c'est ce que j'ai fait, mais je stocke la note avec, comme ça on peut la calculer en SQL directement trifus

numquote <=> quote_id <=> id_quote <=> bozopouetpouet

2> tant pis pour eux, de toute façon on note que des quotes à la con, hein, pas la peine de se prendre le chou

15

squalyl> Je vais étudier en détail ta proposition... Tout en prenant compte des remarques de Sasume, évidemment, je pense que le triplet suffit laaaaargement aussi ^^
Sasume (./13) :
1. La ressource là c'est le quote en question. J'imagine qu'il les stocke dans un bdd et qu'il les identifie avec ... un identifiant.

Tout-à-fait. Pour chaque quote, il y a un numéro de quote, et un statut de la quote : "En cours de validation", "Validée", "Refusée".
squalyl (./14) :
2> tant pis pour eux, de toute façon on note que des quotes à la con, hein, pas la peine de se prendre le chou

Malheureusement, ceux qui fréquentent le chan d'où viennent les quotes sont loin d'avoir une rigueur et une obéissance asiatiques... Et quand on parle de nouvelles quotes ajoutées sur le chan, comme par hasard, le nombre de votants explose, mais les notes des quotes ne bougent pas d'un iota...

16

stocker la note a coté te permet de recalculer la moyenne sans utiliser PHP. Mais je suppose que t'as déja un truc basé sur la moyenne précédente et le nb de votes... dans ce cas le triplet suffit.

17

squalyl (./16) :
Mais je suppose que t'as déja un truc basé sur la moyenne précédente et le nb de votes...


Heuuuuu... Y'a pas vraiment de moyenne là-dedans gni

Note positive : augmenter le score et le nombre de votants de 1
Note négative : augmenter le nombre de votants de 1 et baisser le score de 1.

C'est tout cheeky

18

ah, ok smile

dans ce cas le triplet suffit smile

19

Yoshi Noir (./17) :
Note positive : augmenter le score et le nombre de votants de 1
Note négative : augmenter le nombre de votants de 1 et baisser le score de 1.



Euh, il y a tout de même des bornes, non ? .... parce que sinon on a vite fait de se retrouver à -100000 ...

20

Ben c'est pas vraiment un problème, quand on regarde bashfr... C'est vraiment un vote, pas une notation.
avatar

21

Le stockage d'adresse IP c'est un peu dommage pour les gens NAT-és... Mais y'a pas vraiment d'autre solution, une authentification serait trop lourde.
[edit] /me va lire le topic juste en dessous.

22

Bon maintenant j'ai un autre problème... Empêcher les Googlebots et Yahoobots de venir référencer ma page en cliquant sur les liens de vote angry

J'ai mis en place ceci :

$ip2 = $_SERVER[REMOTE_ADDR];
  if (substr($ip2, 0, 6)=="66.249")
  {
    echo "Die GoogleBot, Die...";
    //initialisation d'une variable flag
  }
  if (substr($ip2, 0, 4)=="74.6")
  {
    echo "Die YahooBot, Die...";
    //la même variable flag...
  }


Malheureusement, si les googlebots sont filtrés, les yahoobots ne le sont pas sorry

23

robots.txt ?
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

24

Pour l'histoire des liens activés par des bots (ou un accélérateur de connexion fait par Google qui ouvrait tous les liens de la page pour que le chargement soit plus rapide une fois que tu avais vraiment cliqué sur le lien), il me semble que la solution "correcte", c'est de pas mettre le vote dans un GET, mais dans un POST, puisque ce n'est pas une opération "idempotent".

http://www.cs.tut.fi/~jkorpela/forms/methods.html par exemple
avatar
;)

25

Attention à ne pas mélanger les termes techniques. En l'occurence ce qui importe ici c'est que la méthode ne soit pas considérée comme "sûre" plutôt que non idempotente : http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

26

Hum... faut vraiment que je lise le protocole et aussi le document « l'architecture du web » mais sinon ça risque de marcher ce que j'ai dit ou pas? (autrement dit, les bots font-ils des requêtes POST?)
avatar
;)

27

28

Apriori non.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

29

Pourquoi pas ?

30

ben va remplir des champs dont tu n'a pas connaissance de comment les remplir..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.