Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Recaptcha valideerimine kaks korda. märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
LiivaneLord
Sõpradele "Olavi"

liitunud: 20.06.2006




sõnum 19.11.2013 22:30:28 Recaptcha valideerimine kaks korda. vasta tsitaadiga

Koostasin recaptcha selliselt, et pildilt mahakirjutatud sõnede kontrollimiseks ei peaks lehte refreshima. Paraku katsetasin alles nüüd oma "loomingut" ja selgus, et ühel võimalusel saab recaptchast mööda minna.

Proovisin siis rakendada valideerimist sel viisil, et lisaks olemasolevale javascriptiga kutsele teha korduvvalideerimine ka lehe refreshimisel samade andmete korral. Katsetasin ühtviisi ja teistviisi ning lõpuks söötsin funktsioonidele otse ette need andmed, mille korra oli recaptcha loonud ning mina olin sisestanud (recaptcha_challenge_field ning recaptcha_response_field), kuid esimene kord valideerib, aga kõik järgnevad korrad enam ei valideeri, naaseb tulemusega false.

Googeldasin natukene ning tundub, et peale ühekordset valideerimist seanss killitakse ning enam sama pildi ja sisestatud andmetega valideerida pole võimalik -> http://stackoverflow.com/questions/9227512/recaptcha-why-cant-i-check-the-same-result-twice

Kuidas saaks nii, et javascripti abil valideerides ning õigesti sisestatud sõnede korral saata andmed serverile kontrollimiseks sedasi, et klient ei saaks nende andmetega manipuleerides läbi lipsata?

Ärge väga pommitama hakake, aga tagauksega kommentaarium on mul näiteks siin lehel -> http://liivanelord.planet.ee/viking/
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 19
tagasi üles
vaata kasutaja infot saada privaatsõnum
Redikate
HV veteran
Redikate

liitunud: 30.12.2005




sõnum 20.11.2013 14:40:05 vasta tsitaadiga

Päris täpselt ei saa aru nüüd miks sul on vaja topelt valideerida. See eeldab, et loogiliselt ei pea paika midagi.

reCaptcha't saad kontrollida ainult serveris ju?. Teed ajax calli mis seda kontrolli teeb, juhul kui kontroll oli õige siis serveris näiteks kirjutad sessiooni, et see kasutaja on 1x captcha läbinud ning võib ühe kommentaari postitada. Võid ka kirja panna millal see läbimine toimus ning timeoutida mingi aja peale. A'la 1m peale captcha valideerimist saab ainult kommentaari postida.
Kui nüüd kasutaja kommentaari postitab, siis kontrollid ka sessionis on kirjas et captcha on läbitud või mitte, kui on siis lased läbi, kui ei ole siis annad errori.

Tunduks nagu loogiline lahendus.

E: Vaata oma stacki 2 vastust. Tunduks nagu selline lahendus.

_________________
http://nodejs.org/
"I'm also a person. Programming is just one thing I do."
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 33
tagasi üles
vaata kasutaja infot saada privaatsõnum
LiivaneLord
Sõpradele "Olavi"

liitunud: 20.06.2006




sõnum 20.11.2013 17:50:57 vasta tsitaadiga

Redikate, selge, tegin sessiooni sinna, kus recaptcha kontrollib ning naaseb truega. icon_smile.gif

Senine "tagauks" oli seal, kus sai andmed serverile saata javascripti abil ning kommentaar lisati automaatselt andmebaasi ja mingit kontrolli ei olnud. icon_biggrin.gif

Selle "tagaukse" peale mõtlesin täiesti juhuslikult ning katse korras tegin greasemonkey skriptiga nii, et nupule vajutades ei valideerita recaptchat, vaid andmed saadetakse kohe ära. icon_biggrin.gif

Tänan vastuse eest. icon_smile.gif
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 19
tagasi üles
vaata kasutaja infot saada privaatsõnum
Redikate
HV veteran
Redikate

liitunud: 30.12.2005




sõnum 20.11.2013 18:21:05 vasta tsitaadiga

Nojah, see tagauks läheb kinni kui sa kommentaari postitades kontrollid kas captcha on läbitud või mitte (sessioni kasutades siis).

Loodatavasti oled sa ka sql injectioni, htmli sisestamise, XSS'i ning kommentaari pikkuse peale mõelnud.

_________________
http://nodejs.org/
"I'm also a person. Programming is just one thing I do."
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 33
tagasi üles
vaata kasutaja infot saada privaatsõnum
LiivaneLord
Sõpradele "Olavi"

liitunud: 20.06.2006




sõnum 21.11.2013 18:55:13 vasta tsitaadiga

Redikate kirjutas:
Nojah, see tagauks läheb kinni kui sa kommentaari postitades kontrollid kas captcha on läbitud või mitte (sessioni kasutades siis).

Loodatavasti oled sa ka sql injectioni, htmli sisestamise, XSS'i ning kommentaari pikkuse peale mõelnud.

Vist olen.

SQL injectionit vist ei saa olla, kuna kommentaari väljundiks on käsk:
php:
  1. $sql_kom=mysql_query("select * from viking_kommentaarid order by aeg desc");


Kommentaari sisestamise eel kasutan PHP funktsiooni addslashes() ja htmlspecialchars()
php:
  1. $query_koms=mysql_query("INSERT INTO viking_kommentaarid (nimi, kommentaar) VALUES ('".addslashes(htmlspecialchars($_POST[kommenteerija]))."', '".addslashes(htmlspecialchars($_POST[kommentaar]))."')");

Kuna keegi on juba katsetanud, siis hetkel on esimeseks kommentaariks andmebaasis - <script>alert('hello world');</script>

Aga kommentaari pikkust ei oska küll määrata. Andmebaasis valisin veeru tüübiks TEXT ja kui sisestan pikkuse (näiteks 5000), siis näitab, et tabelit muudeti, aga muudatus ei kajastu ning kui soovin uuesti veergu muuta, siis on pikkuse lahter jälle tühi.

Kas määran veeru tüübiks VARCHAR, nagu see ka kommenteerija veerul on? Kui VARCHARi kasutan, siis salvestab teksti lubatud pikkuse ja see toimib. Ma ei tea, miks TEXT olen valinud, vist naised saunas seletasid, et see on millegipärast parem. icon_biggrin.gif
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 19
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 21.11.2013 20:08:50 vasta tsitaadiga

Põhiline mis peaksid tegema on mysql_real_escape_string() pikkuse saad juba sisestamisel välja kärpida substr($uudis,0,256) 256 oleks siis see pikkus kusmaalt lõpp maha lõigatakse.
veidi selgituseks ka targemat juttu
tsitaat:
If the database layer doesn't support binding variables then quote each non numeric user supplied value that is passed to the database with the database-specific string escape function (e.g. mysql_real_escape_string(), sqlite_escape_string(), etc.). Generic functions like addslashes() are useful only in a very specific environment (e.g. MySQL in a single-byte character set with disabled NO_BACKSLASH_ESCAPES) so it is better to avoid them.

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Recaptcha valideerimine kaks korda.
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.