Več mysql uporabnikov za večjo varnost?
8 naročnikov
8 naročnikov
Zdravo,
zanima me vaše mnenje, ali se vam zdi cool ideja, da imaš v obsežnem cms sistemu ob namestitvi možnost, da sta frontend in backend mysql uporabnika ločena. Če bi ta možnost bila izbrana, bi se front uporabniku določili samo need-to-have privilegiji na need-to-have tabelah.
Kot neka dodatna zaščita pri sql injectionu.
Yay / nay?
9 odgovorov
Preveč kompliciranje IMHO.
Jaz sem ločil uporabnike, ko je šlo za aplikacijo. Zato, da nekdo ne more do podatkov druge firme. V navadnem večuporabniškem CMSju pa se mi zdi too much tak pristop, ki ga hočeš naredit. Vzemi eno dobro knjigo na temo php security in naredi tako, da ne gre shekat. Saj ni težko, ko enkrat veš metode s katerimi se hacka sajte.
Se pridruzujem SpinX-u. Se mi zdi boljsi pristop permissnov :)
Glede na zadnje (odmevne) vdore, pa poskrbi da se ne bo dalo URLja spoofat in SQL injectna delat :D
Ločevanje uporabnikov je odlična ideja. Ustvari še en varnostni sloj, ki preprečuje zlorabe morebitnih injectionov (ali pa čisto navadnih programskih napak), seveda če privilegije ustrezno okrniš za vsakega uporabnika. Varnosti ni nikoli preveč in tale mehanizem imaš skoraj zastonj. To, da frontend user ne more izbrisati uporabnika iz tabele users je neprecenljivo. :D
Do določene mere boš pridobil na varnosti ja, če je pa smotrno pa ne vem... nenazadnje bo večina teh tabel morala biti dostopna tudi iz frontenda, saj so nastavitve, ki jih narediš v backendu pomembne. Skratka, v končni fazi si boš zakompliciral lajf, pridobil pa bore malo. Fora je samo v tem da backend in frontend ne moreta biti čisto ločena, drugače ne moreta vplivati en na drugega... vsaj pri CMS-u. Če bi bila v backendu kaka druga aplikacija, ki recimo ne vpliva na frontend, pa bi bilo to več kot smiselno.
Odvisno tudi, koliko je škode, če ti nekdo vdre. Če ni pomembna stran, potem se ne splača ukvarjat. Metoda po moje kar precej izboljša varnost.
Tudi če obvladaš "varno" programiranje se ti zmeraj lahko zgodi kaka luknja na katero nisi pomislil.
Gre se za CMS + spletna trgovina.
Finta je v tem, da bi bilo to precej enostavno za narediti, saj sta front in backend ločeni php aplikaciji (codeigniter layout), le skupni library uporabljata (razrede na lastnem enostavnem ORM).
Bom v enem od milestoneov po prvem stable-production naredil... "Use separate DB user for improved frontend security". Če bo kdo delal module bo pač moral še to vzeti v poštev pri deployment skripti :)
Če uporabljaš ORM, si že tako dobro zaščiten proti SQL injection-u.
Kar se tiče pa MySQL userja za stran, pa je generalno pametno naredit posebnega userja, ki ima pravice samo za SELECT in UPDATE, pa če uporabljaš DELETE še to, čeprav je še boljše, da se implemenitra "soft delete", potem lahko še DELETE izključiš.
Glede na konfiguracijo, izklopiš še remote userje, root-a zakleneš na IP, user od aplikacije pa da lahko samo prek 127.0.0.1/localhost dostopa, pa bo.