Ardweaden / Ethnoguessr-V2

0 stars 0 forks source link

Nevarne poizvedbe SQL in varnost aplikacije #3

Open jaanos opened 6 years ago

jaanos commented 6 years ago

Trenutno podatke vstavljaš v poizvedbe z metodo format, kar lahko vodi do napadov SQL injection. Namesto tega podatke podajaj v seznamu kot drugi argument metode execute - s knjižnico psycopg2 za delo s PostgreSQL bi to šlo npr. tako:

c.execute("INSERT INTO users (username, password, email, confirmed) VALUES (%s, %s, %s, %s)",
          [username, password, email, 0])

Tako se bodo podatki varno vstavili v poizvedbo glede na njihov tip. S knjižnico sqlite3 bi sicer namesto %s moral pisati ? na mestih, kamor naj se vključijo podatki.

Opozoril bi še na možnost goljufanja, ki se pojavi pri trenutni implementaciji. Trenutno namreč uporabniku poleg kazalca na sliko pošlješ še koordinate - že te bi lahko uporabnik prestregel. Pri reševanju pa potem izračun razdalje in točk opraviš v JavaScriptu, na strežnik pa pošlješ samo dosežene točke. Uporabnik bi torej lahko ponaredil tak zahtevek in si pripisal poljubno število točk.

Predlagam torej, da preverjanje rezultatov premakneš v strežniški del. Tako koordinat slike ne bi poslal uporabniku skupaj s sliko - bi si pa moral pri neskončnem načinu zapomniti, katero sliko je uporabnik nazadnje videl (na ER diagramu bi to pomenila relacija ena na več med uporabnikom in sliko, v bazi pa bi to bil dodaten stolpec pri uporabniku, ki je referenca na sliko). Pri izzivih pa to informacijo (glede na opis iz #1) že imaš. Pri reševanju bi torej uporabnik strežniku poslal koordinate - izračun razdalje in točk bi se tako opravil na strežniku, uporabnik pa bi dobil samo povratno informacijo.