Avatar billede larsbachmanndk Nybegynder
16. december 2005 - 08:48 Der er 11 kommentarer og
2 løsninger

Sikkershedsbrist i votesystem

Hej Experter

Jeg har lavet et hjemmeside hvor man kan tilmelde sit website og få det vurderet af de andre besøgende.

Problemet er bare at der er noget galt...
Man kan give en side karakter fra 1 til 10, men det sker tit at en eller flere sider pludselig har fået 10 stemmer mere, 1 stemme på 1, 1 stemme på 2, en stemme på 3 osv op til 10.
Det er som om at der er en robot der følger alle URL's og derved opdateres databasen som om at det var en der stemte.

Eller kan det være en der har fundet ud af at manipulere med queryStringen

URL's til at stemme ser sådan ud:
vote.asp?id=29&vote=5

Hvor id= sidens id og vote = "den karakter man vil give"

Siden kan ses på www.targetzone.dk
er der nogen der kan fortælle hvorfor stemmerne pludselig er fordoblet?
Avatar billede medions Nybegynder
16. december 2005 - 09:12 #1
Har du husket at lave sådan at man ikke kan klikke opdater og så at den refresher og loader voten igen?
- tror du skal kører noget IP kontrol, altså hvis én IP har voted før, kan den ikke igen...

//>Rune
Avatar billede larsbachmanndk Nybegynder
16. december 2005 - 09:20 #2
Den kører på cookies.
Så man kan kun stemme en gang på hver side, ellers kommer den med en fejlmeddelse
Avatar billede fennec Nybegynder
16. december 2005 - 09:51 #3
Kunne det ikke være en google-robot (eller anden søgemaskine) der kom forbi?? Jeg har ikke den store viden om hvordan de specifikt fungere, men jeg mener de går igennem alle link på siden, hvilket kunne være en grund til at der var en stemme på hver mulighed.
Avatar billede larsbachmanndk Nybegynder
16. december 2005 - 09:57 #4
Jeg har også mistænke om at det er en robot der kravler rundt.
Er der nogen der ved om det kan være det der er problemet?
Avatar billede doc404 Novice
16. december 2005 - 10:21 #5
Jamen, det skal da gå galt.

Søgemaskiner vil jo netop følge links på dine sider - og derfor stemme på alt og alle.

Du skal lave det med <form></form> i stedet...

Og husk på, at du aldrig vil kunne lave et stemmesystem, der ikke kan omgås. Cookies kan slås fra, fra mit firma vil alle have samme IP adresse etc...
Avatar billede eagleeye Praktikant
16. december 2005 - 10:21 #6
Man kan lave en robots.txt fil hvor man kan side til roboterne at de ikke må kigge i den og den folder eller filer. Lidt mere information:
http://www.robotstxt.org/wc/faq.html

http://www.google.com/webmasters/remove.html


Online hjælpe tools:
http://www.searchenginepromotionhelp.com/m/robots-text-creator/simple-robots-creator.php
http://www.hypergurl.com/generators/robotgenerator.html
Avatar billede thesurfer Nybegynder
16. december 2005 - 10:28 #7
Følgende metoder kan ikke bruges:
* ip: Man kan snyde, ved at have en dynamisk ip, eller ved at bruge en proxy
* cookies: Cookies kan nemt slettes, og faktisk også redigeres
* robots.txt: Denne kan kun bruges, hvis "bot'en" overholder reglerne. Hvis man vil fuske, kan man bare ignorere robots.txt, ved at lave sin egen "bot".

Jeg vil mene, at den bedste måde er, at man skal være logget ind.
Men du vil miste en masse stemmer, fordi folk måske ikke gider at oprette sig som bruger først.

/theSurfer
Avatar billede larsbachmanndk Nybegynder
16. december 2005 - 10:33 #8
Tak for jeres respons.

Jeg har nu lavet en robots.txt
-------
User-agent: *
Disallow: /vote.asp
-------

Så må jeg lige se om det kan klarer problemet, eller om det er nogen der manuelt manipulere med resultatet ved hjælp af SQL injections eller lignende.
Avatar billede eagleeye Praktikant
16. december 2005 - 10:40 #9
Hvis du siger det er en af hver stemme 1 til 10 så lyder det ikke som om der er en som snyder. Hvis folk snyder er det vel typisk de stemmer 9-10 mange gange for at trække siden op eller stememr 1-2 for at tække den ned.
Avatar billede eagleeye Praktikant
16. december 2005 - 10:47 #10
For at undgår SQL injections så husk at tjekke data modtaget via querystringen så husk altid at tage stilling til ' om den skal fjerne eller beholdes.

Husk også at lave type tjek på data eks:

id = Request.Querstring("id")
if not (isNumeric(id)) then
  'Fejl i ID..
end if
Avatar billede eagleeye Praktikant
16. december 2005 - 10:53 #11
Og tjek også på om data er inden for min/max værdier hvis der er en min/max værdi så man ikke kan skrive og det går godt: vote.asp?id=29&vote=200
Avatar billede larsbachmanndk Nybegynder
19. december 2005 - 13:07 #12
Nu har jeg i nogle dage testet om robots.txt filen kunne løse problemet, men det har den desværre ikke kunne.

Jeg er netop igang med at opdatere koden, så jeg undgår SQL injections og andet manipulation med querystringen.

Eagleeyes kode
----
id = Request.Querstring("id")
if not (isNumeric(id)) then
  'Fejl i ID..
end if
----

har jeg prøvet at sætte ind, men uden held.
Som jeg har forstået det, så tjekker isNumeric om id = "tal"?

Er det korrekt?
Avatar billede larsbachmanndk Nybegynder
19. december 2005 - 14:11 #13
Jeg har nu fået det til at virke med:

tal = Request.QueryString("id")
If not IsNumeric(tal) Then
... fejl osv.

Men som tidligere nævnt har jeg ikke fået løst det andet problem med stemmerne ved hjælp af robots.txt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester