15. februar 2004 - 15:37Der er
39 kommentarer og 1 løsning
Person ødelægger pointsystem!
Der er desværre en person der ødelægger mit pointsystem. Når man bedømmer en fil kan skal man vælge et antal point på en skala fra 1-10. Personen har dog fundet en måde til at give flere point. Point antallet regnes ud ved at sige point delt med stemmer = et tal under 10 (helst!!!).
Håber i kan hjælpe mig.
Her er lidt kode:
$ip = mysql_query("SELECT * FROM flash_rating WHERE id='$id' AND ip='$REMOTE_ADDR'"); if(mysql_num_rows($ip)>0){ $flash_besked="Du har allerede Stemt"; }elseif($karakter>10){ $flash_besked="Forkert karakter"; } elseif($Stem){ mysql_query("UPDATE flash SET stemmer=stemmer+1, point=point+$karakter WHERE id='$id'") or die (mysql_error()); mysql_query("INSERT INTO flash_rating (id, ip) VALUES ('$id','$REMOTE_ADDR')") or die (mysql_error()); $flash_besked="Tak for din stemme!";
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
Jeg kan se at du koder med register_globals til on. Dette kan være en sikkerhedsrisiko, hvilket er grunden til at det >ikke< er standard længere. På langt de fleste servere du lægger dit script ud på, vil det ikke virke. Men nok om det.
Du skal tænke på at brugeren kan oprette sin egen form som ser sådan her ud: <form method='POST' action='index.php?ske=flash_vis&id=xx'> hvor han selv kan sætte id til hvad han vil. Jeg ved ikke om du bruger id til at identificere brugere med, med hvis du gør så kan det altså ændres, så brugeren kan blive ved med at stemme.
terrak-> Jeg ved godt at brugeren bare kan skrive index.phpindex.php?ske=flash_vis&id=19&Stem=Stem&karakter=5 og dette gør ikke noget da jeg regsitrere ip
Men jeg kan bare ikke forstå hvordan man kan skrive: index.phpindex.php?ske=flash_vis&id=19&Stem=Stem&karakter=55 da jeg har en kode som siger: elseif($karakter>10){ $flash_besked="Forkert karakter"; }
I din sql-query skriver du SELECT * FROM flash_rating WHERE id='$id' AND ip='$REMOTE_ADDR' Det betyder at id OG ip begge skal være noget bestemt. Og da jeg tvivler på at den vil finde en række i din database, hvor id='ghwlkw452tngjs' OG ip er den korrekte ip-adresse, så kan personen jo blive ved med at stemme. Hvordan forhindrer du det?
En anden ting: Kan du ikke bare sætte $karakter til 0, hvis $karakter er over 10? for så bliver der jo ikke lagt noget til, hvis den udfører din sql-query senere i scriptet; elseif($karakter>10){ $flash_besked="Forkert karakter"; $karakter=0; }
det der irritere mig mest er at jeg ikke selv kan finde ud af at "hacke" systemmet. Hvis jeg skriver: index.php?ske=flash_vis&id=19&Stem=Stem&karakter=55
At sætte register_globals til off ville gøre ende på problemet(hvis det kan lade sig gøre). Så får $karakter nemlig ikke automatisk tildelt værdien fra adresselinjen. Det betyder dog at du skal til at rette i alle dine koder som er kodet til register_globals = on.
Umiddelbart ingen problemer. Jeg samler ikke på point.
Generelt: skal man samle stemmer, bør man registrere hver stemme med en række i databasen, så man nemmere kan konstatere, og rette, fejl og forsøg på "hacking". Man kan evt både lave en sum og et antal, samt registrere hver stemme. Ved rettelse skal man så blot genberegne sum og antal.
(jeg samler som sagt ikke på point, og er faktisk ligeglad med hvordan du bruger dine point, men konstaterer blot, at du nu har givet dem til en person, der på intet tidspukt har skrevet noget korrekt. Det er dit valg *g*)
Tjaa... du har vel ret, men jeg har jo fået nogle brugbare svar så jeg kan ikke tage pointene selv. Så jeg gav pointene til den eneste der havde lagt et svar.
erik -> Jeg er enig i det med reg.exp. Faktisk bruger jeg selv en "form validator" klasse, hvor alle form felter blot defineres med navn + en reg.exp. der beskriver valideringen. Så bliver koden også meget enklere at se på.
Hej... Ved godt dette spørgsmål er lukket.. Jeg forstår bare ikke hvordan det kan gå til at en idiot stadig kan ødelægge pointsystemmet. Vi havde da lukket hullet... Oder Was?
Jeg har posted hele point koden helt øvertst. Det skulle vel være den der er et hul i. Med hensyn til "vi" ville jeg på ingen måde give jer ansvaret for at der stadig er et hul. Det er selvfølgelig mit som webmaster. Mente bare ikke jeg kunne være bekendt at skrive: "Jeg havde da lukket hullet", da jeg har fået en masse hjælp af jer.
Som jeg sagde i allerførste kommentar: Man skal altid checke sit input. Du har fået een af dine parametre checket, men du har glemt at checke alle de andre. Og du har også ganske ret: vi har på intet tidspunkt garanteret at allehuller er lukkede.
Du checker fx ikke på din $id, og derfor kan man stemme så mange gange man vil på fx film nummer 167. Udskift 167+4 med 167+5, osv
prøvede at lave noget ereg med at den kun skulle acceptere tal, men det gik ikke så godt...
elseif (!is_number($id)){ echo"WRONG!!!"; }
Er det korrekt???
Noget jeg ikke forstår er at "hackerne kan give tyve point... Man kan ihvertfald se at nogle filer kun har fået én stemme, men tyve point.... hvordan kan det lade sig gøre??? Har JEG (det var det jeg skulle sige ik') ikke lukket hullet med at give for mange pointd?
Synes godt om
Ny brugerNybegynder
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.