JureMB / BazaRegat

MIT License
0 stars 1 forks source link

Dostop do baze, nevarne poizvedbe #3

Closed jaanos closed 6 years ago

jaanos commented 6 years ago

Vidim, da v app.py uvažate podatke za prijavo iz auth.py (tega seveda ni v repozitoriju zaradi vnosa v .gitignore). Ker želite, da bo aplikacijo lahko uporabil kdorkoli, tam torej uvozite auth_public.py (glejte vzorec. Seveda bo potrebno nastaviti tudi ustrezne pravice - poglejte si pdurcik/Baza-clanstva-RDR#3. Vaše aplikacije tako nisem mogel preizkusiti.

Opažam še, da podatke v poizvedbe vstavljate z metodo format, kar pa lahko vodi do napadov SQL injection. Da bodo poizvedbe varne, na mesto vsakega podatka postavite %s (brez morebitnih navednic!), podatke pa podajte v seznamu kot drugi element metode execute, npr.

cur.execute("""
    SELECT sailno, tekmovalec.ime, spol, leto_rojstva,
           klub.ime AS ime_kluba FROM klub
    JOIN clanstvo ON klub.idklub = clanstvo.klub_idklub
    JOIN tekmovalec
        ON clanstvo.tekmovalec_idtekmovalec = tekmovalec.idtekmovalec
    WHERE sailno = %s
""", [sailno])

Poleg tega naredite še nekonstantno število začasnih tabel, kar je v nasprotju s samo organizacijo podatkov - kolikor vidim, to počnete samo za potrebe izračuna točk. Začasno tabelo klubi_plovi imate lahko kot pogled (VIEW), izračuna točk se pa lahko lotite nekako tako.

Seveda lahko z ustreznimi JOINi v isti poizvedbi pridobite še ostale podatke o tekmovalcih.

jaanos commented 6 years ago

Vidim, da je to urejeno, vašo spletno aplikacijo pa sem testiral in lepo deluje. Edino, kar bi pripomnil, je to, da bi bilo lepše, če pri iskanju ne bi bilo potrbno vpisati celotnega imena jadralca, pač pa bi se pri nepopolnih (oziroma ne-enoličnih) vnosih prikazal seznam zadetkov.

Z @alenFMF ste se že domenili za termin zagovora. Če pa boste še kaj spreminjali, mi prosim javite, da posodobim povezavo na repozitoriju predmeta.