Jump to content
php.lv forumi

Sistēmas drošība


Peeter

Recommended Posts

Sveiki. Veidoju vienu mazu datu bāzi un domāju kā uztaisīt autorizēšanās sistēmu. Pēc ielogošanās pieslēdzamies datu bāzei un pārbaudam vai eksistē ievadītais lietotāja vārds. Ja lietotāja vārds eksistē paņemam no datubāzes lietotāja paroli(kas tur stāv ar md5 sakodēta) un salīdzinam ar ievadīto paroli. Ja parole un lietotāja vārds ir pareizi, izveidojam sesiju ar mainīgo kurs apzīme, ka lietotājs ir veiksimi ielogojies. Lietotājam pārslēdzoties uz citu lapu pārbaudam vai eksistē sesijas mainīgais(atļaujam pieeju lapai vai redirektējam uz login lapu).

Vai šāda sistēma būtu pietiekami droša? Varbūt ir kādi ieteikumi, komentāri labojumi?

Link to comment
Share on other sites

Tas ir pamatu pamats. Lai būtu vēl drošāk, tad vari piesaistīt sesiju IP adresei, pārlūkam (ģenerē no user-agent hashu, kuru pēc tam visas sesijas laikā čeko vai ir tas pats).

 

Palasi par:

http://en.wikipedia.org/wiki/Session_fixation

http://shiflett.org/articles/session-fixation

http://en.wikipedia.org/wiki/Session_poisoning

http://shiflett.org/articles/session-hijacking

 

PS. Neaizmirsti par visu ienākošo datu filtrāciju arī.

Link to comment
Share on other sites

tik pat labi vari uzreiz usera vārdu un paroles hešu salīdzināt vienā piegājienā. sessijā var likt uzreiz visus usera datus, jo tie noderēs vairāk kā tikai mainīgais vai ir ielogojies.

 

pie visa tā kas iepriekš, vēl login formai var pielikt klāt captcha un kaut kādu useru lockošanu, ja šis pārāk daudz nepareizi paroli raksta. paša logina uzlikšana uz ssl ar nāks tikai doršībai par labu.

 

bet vispirms jāskatās cik apdraudēta tā sistēma būs, ja nekas īpaši, pietiek ar tādu kā teici sākumā un nav vērts aizrauties ar paranojisku drošību kur to nevajag :)

Edited by v3rb0
Link to comment
Share on other sites

Izskatās, ka esmu uz pareiza ceļa. Sistēmu principā lietos apmēram 20 firmas darbinieku un pieļauju, ka nekad netiks mēģināta uzlauzt. Jautājums jau vairāk manas izglītošanās sakarā, lai turpmāk vajadzības gadījumā rakstītu drošākas datu bāzes. Paldies andrisp par linkiem. laba lasāmviela.

Bet teiksim, ja nopietns speciālists mēģinātu iegūt pieeju aprakstītai sistēmai vai viņam tas izdotos. Pat ja nefiltrējam ienākošos datus nevaru iedomāties kā to varētu izdarīt.

Link to comment
Share on other sites

Bet teiksim, ja nopietns speciālists mēģinātu iegūt pieeju aprakstītai sistēmai vai viņam tas izdotos.

Ja neizmaciisi (neizdreseesi) Blondiini/gramatvedi... tad izdoshaanaas ir par 80% ... ieej kaadaa ofisaa un pakokjitee ar Sekretaari + paskaties kas vinjai pilipinaats uz Monitora ... I viisa maaksla....

(sho variantu esmu redzeejis ~~~20% Lielo Firmu...)

Link to comment
Share on other sites

Vari vel pie katras lapas ielades chekot IP adresi, kas ir iestatita sessijaa, ielogojoties. Ja nesakrit - met ara. Tas varetu palidzet ja kaadam izdodas nozagt sessijas id un mejinat to pielietot.

Link to comment
Share on other sites

Pat ja nefiltrējam ienākošos datus nevaru iedomāties kā to varētu izdarīt.

http://en.wikipedia.org/wiki/Sql_injection

http://en.wikipedia.org/wiki/XSS

 

sessijā var likt uzreiz visus usera datus

Paroli gan nevajag glabāt sesijā. Sesijā nevajag glabāt nekādus datus, kurus kāds var ļaunprātīgi izmantot. Tas attiecas īpaši uz shared hostingiem, bet tavā gadijumā tas var nebūt tik būtiski.

 

PS. NiTrino, iesaku izlasīt visu thread'u pirms raksti atbildi ;).

Edited by andrisp
Link to comment
Share on other sites

Es šo lietu daru tā, ka klienta pusē tiek sahašoti kopā username, parole un katram ielogošanās meģinājumam unikāls challenge hash. Serverim tiek nosūtīts tikai šis vienīgais sha1 hash.

Sesijai protams piesaistu IP+useragetnt hash (tā ir daudz īsāk) un sesijas expire laiku, kas ir piemēram max 20 minūtes kopš iepriekšējās darbības. Sesijas ID tiek nomainīts pie katras darbības, tāka nosperot sesiju, vēl ir jāsakrīt 3-4 faktoriem, lai varētu viņu izmantot.

 

Var jau būt, ka kaut kam vienkāršam tas ir pārāk sarežģīti, bet toties var mierīgi gulēt :)

Link to comment
Share on other sites

kaada jeega paarluuku glabaat? ja jau taa vajag, var pielabot headerus. ar ip adresi un hashu pietiek. ja vajadzees salasiit paroles, tad ir daudz humanaaki risinaajumi.

kaa daru es. man ir tabula `session` kur es glabaju `id` - sesijas numurs, ja vajag piesaistiit kam citam, `hash` - katram savu hashu, `ip` - ip adrese, `updated` - peedeejo reizi atjaunots. hashu glabaaju sessijaa, urlaa vai veel sazin kur. tad ar pieprasiijumu mekleeju ierakstu ar ip adresi + hashu + laiku, neviss uzticos sessijaam. un pie tam es uzskatu, ka php vajadzeeja pashiem paruupeeties lai sessijas vareetu lietot tikai viens kompis, nevis arii citi (par droshiiibu). prieksh manis sessijas ir taads maiss, ar kura paliidziibu var saglabaat mainiigos uz lapas lietoshanas laiku. neviss glabaat tur kaut ko svariigaaku: username, paroles, mailus, vai veel ko taadu.

Link to comment
Share on other sites

×
×
  • Create New...