Integrera recaptcha-script i registreringsscript.

Permalänk
Medlem

Integrera recaptcha-script i registreringsscript.

Hej!

Jag har nu laddat ner och börjat sätta min in i recaptcha. Det är alltså en färdiga captchafunktion som enligt mig fungerar ypperligt. Dock har jag nu bara echo ut det funkar för att testa...

Nu vill jag alltså lägga på det i mitt registreringsskript. Jag vill att man ska skriva in koden, och när det är rätt kod ska allt skrivas in i databasen. Just nu har jag ett fungerade recaptchascript och ett fungerande registreringsskript, dock icke sammanhängande.

Här är registreringen: http://pastie.org/1861274
Och här är recaptcha-scriptet: http://www.thefreecountry.com/php/captcha.shtml

Hur ska de fogas samman?

Tack för du tog din tid att läsa min tråd

Permalänk
Medlem

Nu har jag gjort mitt script. Dock funerar det inte. Captcha-delen fungerar felfritt, dock inte registreringen. Det konstiga är att den fungerar när jag inte köra med captchan.

Här är php-koden (verify1.php): http://pastie.org/1861780
Här är formen (re.php): http://pastie.org/1861789

Nu får jag följande error: "Undefined variable: fullname in C:\wamp\www\cp\verify1.php on line 18", vilket jag inte får när jag kör registreringen utan captchan.

Det echos ut "Var vänlig och fylll i alla fällt!", vilket jag har gjort. Vad är felet?

EDIT: Nu såg jag att jag inte hade definierat de olika "indexarna". Klumpigt!

Permalänk
Medlem

Du har inte satt variablerna $fullname, $username, $password eller $repeatpassword
Förutom det problemet har du en del fel i din kod, exempelvis kollar du om $fullname är större än 25 istället för att testa mot dess längd. Dessutom är din INSERT osäker.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Du har inte satt variablerna $fullname, $username, $password eller $repeatpassword
Förutom det problemet har du en del fel i din kod, exempelvis kollar du om $fullname är större än 25 istället för att testa mot dess längd. Dessutom är din INSERT osäker.

På vilket sätt är min insert osäker?

Sen vill jag ju kolla så att fullname inte är större än 25?

Permalänk
Medlem
Skrivet av erre2:

På vilket sätt är min insert osäker?

Sen vill jag ju kolla så att fullname inte är större än 25?

Du vill, tror jag, kolla så att längden av $fullname inte är större än 25.

Sen din insert.. ja, eftersom du inte kollar om användaren redan finns så kan du skriva över gamla användare eller åtminstone skapa användarnamn som inte är unika.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Skrivet av erre2:

På vilket sätt är min insert osäker?

Sen vill jag ju kolla så att fullname inte är större än 25?

Jag tror han menar:

if (strlen($username)>25 || strlen($fullname)>25)

Permalänk
Medlem
Skrivet av Bluetiger:

Jag tror han menar:

if (strlen($username)>25 || strlen($fullname)>25)

Oj, jag slarvade tydligen lite. Tack!

Permalänk
Medlem
Skrivet av Teknocide:

Du har inte satt variablerna $fullname, $username, $password eller $repeatpassword
Förutom det problemet har du en del fel i din kod, exempelvis kollar du om $fullname är större än 25 istället för att testa mot dess längd. Dessutom är din INSERT osäker.

Skriv in detta som fullname.

', '', '' CURTIME()); drop table users ; --

Kan faktis funka med så lite som
'); drop table users ; --

Beroende på hur din tabell är uppbyggd.

med detta borde du nog fatta vad som är 'osäkert' med din SQL.

Lär dig detta och titta ALDRIG tillbaka: http://php.net/manual/en/book.pdo.php

Visa signatur

Speldator: i7-8700k, 32GB DDR4, RTX2080
Server 1: SB 2500k, MZI -P67GD55, 32GB DDR3, Corsair MX 240GB SSD
Surface Pro 2017, Konsoler: Typ alla, Oculus Rift

Permalänk
Medlem
Skrivet av MugiMugi:

Skriv in detta som fullname.

', '', '' CURTIME()); drop table users ; --

Kan faktis funka med så lite som
'); drop table users ; --

Beroende på hur din tabell är uppbyggd.

med detta borde du nog fatta vad som är 'osäkert' med din SQL.

Lär dig detta och titta ALDRIG tillbaka: http://php.net/manual/en/book.pdo.php

Inget hände faktiskt. Alla min data är kvar i databasen. Jag ska dock läsa på mig lite om säkerhet.

Permalänk
Medlem

Nu har jag ändrat lite i min registrerings-kod. Den funkar, och nu använder jag strip_tags, stripslashes och mysql_real_escape_string.

Här är min nya kod: http://pastie.org/1872255

Är den säker nu? Vad kan jag förbättra in den så att ingen kan droppa mina tables eller göra andra elaka saker?

Permalänk
Medlem
Skrivet av erre2:

Nu har jag ändrat lite i min registrerings-kod. Den funkar, och nu använder jag strip_tags, stripslashes och mysql_real_escape_string.

Här är min nya kod: http://pastie.org/1872255

Är den säker nu? Vad kan jag förbättra in den så att ingen kan droppa mina tables eller göra andra elaka saker?

Du planerar att kolla om användaren redan finns?

Permalänk
Medlem
Skrivet av kobb3:

Du planerar att kolla om användaren redan finns?

Det kan vara bra att göra. Det är väll simpelt att göra med numrows?

Permalänk
Medlem
Skrivet av erre2:

Det kan vara bra att göra. Det är väll simpelt att göra med numrows?

Riktigt simpelt

Permalänk
Medlem
Skrivet av kobb3:

Riktigt simpelt

Jag fick det att fungera. Dock så echos alltid ut "det funka" oavsett om det funkar eller ej. Men nu kan man i vilket fall inte registrera en användaren med ett redan existerande användarnamn.

Vad är felet?

KOD: http://pastie.org/1872782

Permalänk
Medlem
Skrivet av erre2:

Vad är felet?

Du behöver { } runt din else-sats

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Du behöver { } runt din else-sats

Nu har jag gjort det, men nu echos det alltid ut "Det användarnamet du valde är redanupptaget", och inget skrivs till databasen, trots att det valda användarnamnet inte finns i databasen.

KOD: http://pastie.org/1874586

Permalänk
Medlem
Skrivet av erre2:

Nu har jag gjort det, men nu echos det alltid ut "Det användarnamet du valde är redanupptaget", och inget skrivs till databasen, trots att det valda användarnamnet inte finns i databasen.

KOD: http://pastie.org/1874586

Lättaste är att köra echo på både $numrows och $query för att se vad du får fram

Permalänk
Medlem
Skrivet av kobb3:

Lättaste är att köra echo på både $numrows och $query för att se vad du får fram

Tack. Logiskt och smidigt sätt att felsöka på!

Felet var att jag hade

if ($numrows=1)

istället för:

if ($numrows!=0)

Vad betyder !0 ? Är det mer än 0?

EDIT: Nu finns det inget säkerhetshål i mitt registreringsskript va? KOD: http://pastie.org/1875011

Permalänk
Skrivet av erre2:

Tack. Logiskt och smidigt sätt att felsöka på!

Felet var att jag hade

if ($numrows=1)

istället för:

if ($numrows!=0)

Vad betyder !0 ? Är det mer än 0?

EDIT: Nu finns det inget säkerhetshål i mitt registreringsskript va? KOD: http://pastie.org/1875011

Med $numrows = 1 ger du $numrows värdet 1, istället för korrekta $numrows == 1

$numrows != 0 betyder "$numrows är inte 0"

Permalänk
Medlem
Skrivet av Cloudburst:

Med $numrows = 1 ger du $numrows värdet 1, istället för korrekta $numrows == 1

$numrows != 0 betyder "$numrows är inte 0"

Så nu är alltså mitt script säkert?

Permalänk
Medlem
Skrivet av erre2:

Så nu är alltså mitt script säkert?

Ja, ifall du har ändrat det till ==

Permalänk
Medlem
Skrivet av kobb3:

Ja, ifall du har ändrat det till ==

Jag ändrade det till !=0, vilket ger samma effekt.

Jag menade dock hela scriptet :). Är allt säkert nu?

Permalänk
Medlem

Du måste ändå ha dubbla ==, annars säger du åt variablen att den är allt annat än 0 istället för att testa ifall den är det.

Mitt "Ja" sist jag skrev var ett svar på om det var säker, framgick väl inte direkt tydligt.

Ja, det är säkert såvitt jag vet.