SandraKersevan / Pasja-bolha

Projekt pri predmetu OPB.
MIT License
0 stars 0 forks source link

Nevarne poizvedbe in baza #4

Closed jaanos closed 5 years ago

jaanos commented 5 years ago

Na repozitoriju vam manjka datoteka .gitignore, zaradi česar se vam je nanj izmuznila mapa __pycache__, ki pa tja ne sodi, saj gre za avtomatsko generirane datoteke. Svetujem, da uporabite kar .gitignore z vzorčnega repozitorija, ki že vsebuje vnos za __pycache__ (seveda jo lahko po potrebi še dopolnite). Mapo __pycache__ bo vseeno potrebno ročno pobrisati in to vključiti v commit. Po ponovnem zagonu aplikacije se bo sicer znova pojavila, a vam je zaradi .gitignore git ne bo ponujal za ponovno vključitev v commit.

Trenutno podatke vstavljate v poizvedbe z metodo format, kar lahko vodi do napadov SQL injection. Namesto tega podatke podajajte v seznamu kot drugi argument metode execute, na njihovo mesto v poizvedbi pa postavite %s, npr.

cur.execute("INSERT INTO uporabniki VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)",
            [st_uporabnika, ime, priimek, naslov, postna_stevilka, email, telefon, uporabnik, geslo])

Opažam še, da v bazi manjkajo tuji ključi v tabelah komentar (stolpca id_uporabnika in id_oglasa) ter posta (stolpec regija). Poleg tega so stolpci min_* in max_* v tabeli pasma tipa text, čeprav bi morali biti tipa integer - nekateri vnosi imajo sicer odvečne presledke, ki pa bi jih bilo treba porezati pri uvozu.

Pri seznamu vseh pasem bi svetoval, da klik na pasmo prikaže stran o pasmi v vaši aplikaciji (tam je tudi že povezava na dogtime.com). Podobno bi svetoval tudi pri prikazu oglasa (čeprav tam klik na ime pasme v naslovu že prikaže vašo stran). Pri prikazu pasme lahko lepše sklanjate: spada v družino.

RobbaB14 commented 5 years ago

Pozdravljeni, vse težave so odpravljene razen težave z bazo. Imamo sledeče probleme: 1.) Tabele si lastita dva različna uporabnika (javnost in barbarar). Ko želimo lastništvo iz javnosti prenesti na barbarar s kodo: ALTER TABLE oglas OWNER TO barbarar nam javi napako: ERROR: must be member of role "barbarar". Po brskanju po internetu smo ugotovile, da lahko lastništvo menja le superuser. Kdo je superuser v našem primeru? Kaj lahko naredimo? 2.) Ker imata tabeli različna lastnika, ne moremo dodajati foreign key-a. 3.) Dodale smo novo tabelo 'druzina', v kateri imamo id_druzine, ime družine in sklanjano ime družine. Rade bi se iz tabele pasma, v stolpcu druzina, sklicevale na to tabelo oz. na id_druzine. To pomeni, da moramo type stolpca druzina iz texta spremeniti v integer. Kako lahko to naredimo? Bi se lahko v zvezi s temi vprašanji oglasile na govorilni uri? Hvala za odgovor, Sara, Sandra in Barbara

jaanos commented 5 years ago

Superuser sem jaz, tako da sem spremenil lastništvo tabel oglas in uporabniki na barbarar. Za ostale pravice prosim poskrbite same. To bi moralo rešiti tudi drugo točko.

Kar se tabele druzina tiče, bo najbolje, če najprej dodaste ustrezen stolpec za družino, nastavite ustrezne vrednosti, nato pa starega pobrišete. Šlo bi nekako tako:

ALTER TABLE pasma ADD COLUMN id_druzine integer REFERENCES druzina(id_druzine);
UPDATE pasma SET id_druzine = druzina.id_druzine
  FROM druzina
  WHERE pasma.druzina = druzina.druzina;
ALTER TABLE pasma DROP COLUMN druzina;

Za govorilno uro ta teden veliko časa najbrž ne bom imel (morda edino jutri med 11:30 in 12:15), tako da upam, da boste uspele rešiti.