zxspectrum Posted December 30, 2005 Report Share Posted December 30, 2005 Līdz šim lapu laižu dalītā režīmā - php faili uz Servera pie provaidera, MySQL serveris pie manis paša. Gribu lūgt servera adminam uzlikt (dot man pieeju) pie MySQL uz Servera. Mani pārāk neuztrauc tas, ka manu paša lapu varētu uzlauzt (no kļūdām jāmācās), bet ir svarīgi, lai manas neuzmanības rezultātā kāds neuzlauž pašu MySQL (lietotāju privilēģijas) un citiem piederošās datubāzes. Tātad - kad griezīšos pie admina ar lūgumu, man būs jāpierāda, ka esmu veicis nepieciešamos drošības pasākumus. Var mājai durvis aizslēgt ar 3 atslēgām, var arī ar 23. Arī mašīnas ar superdārgu signalizāciju tiek nozagtas. Tātad - kāds ir tas optimālais drošības sākuma līmenis (var jau visu laiku likt kaut ko klāt), kurš būtu jāievēro, lai naktīs varētu mierīgi gulēt? :) Pirms iepostot šo topiku, vēlreiz pārlasīju Bubu sarūpēto satura rādītāju, kā arī ieskatījos manuālī. Par drošības tēmu runāts tiek daudz un dikti. Salasot visu kopā, man iznāca tāds kā iespējamo/vēlamo aizsardzības pasākumu plāns. Gribu lūgt, lai jūs tajā ieskatāties. Priecāšos, ja dosiet atsauksmes. Kaklz ir teicis: "Internetā ir pārāk daudz lapu, lai visas nedrošās tiktu uzlauztas". Delfins saka: "Nav nevienas metodes, kas pasargātu 100%". Tātad: kas te ir par daudz un kas vēl trūkst? 0. Vizuālie gļuki tiek apzināti un novērsti (wordwrap, strip_tags utml.). 1. Mainīgos pēc iespējas nodot caur POST. 2. Ja nevar citādi un mainīgie tomēr jānodod caur GET, tad kriptēt. 3. Protams, lapas izmantotāji konektējas caur lietotāju ar lasīšanas tiesībām, un tikai atsevišķos gadījumos (piem. gestbukā postojot) - caur lietotāju ar rakstīšanas/modificēšanas tiesībām uz konkrēto tabulu (lauku?) 4. Katra skripta sākumā uzlikt error_reporting(0) - uz servera gan jau ir display errors=OFF, bet dubults neplīst. 4. Palūgt servera adminam uzstādīt globals uz OFF (kā par brīnumu ir ON... admins nezina, vai?) 5. Useru paroles kriptēt 2x ar md5 + random salt 6. Ierobežot (?) no vienas IP konektus diennaktī 7. Pārbaudīt usera submitojamos datus, lai ierobežotu SQL injekcijas: a. vai dati, kam jābūt skaitlim, tiešām ir skaitlis b. laist cauri tikai labos simbolus. Te datiem varētu uzlaist virsū sekojošo (visu minēto? cik saprotu, visu nav jēgas, jo šis tas dublējas?) - strip_tags() - addslashes() (? Serverim magic quotes jau ir enabled ?) - htmlspecialchars() ar ENT_QUOTES - nl2br() - mysql_escape_string() - preg_replace()/preg_match_all() 100. Lietot SSL ;-) To, ka daudzi citi ir pieredzējušāki un gudrāki, es nenoliedzu. Ko lai dara - 50 gadu vecumā viss lēnām pielec :P Lūdzu to man īpaši neaizrādīt. Par atsauksmēm - paldies. Laimīgu Jauno gadu! Link to comment Share on other sites More sharing options...
v3rb0 Posted December 30, 2005 Report Share Posted December 30, 2005 - imo nav starpība post vai get, kam tiešām vajadzēs dabūs/pamainīs abus. - kriptēt get datus nezinu priekš kam tas vajadzīgs raksts=I#%R@%d2 vai raksts=123 - ja vairāki mainīgie tiek padoti un gribi pamaisīt galvu urķiem-mainīgo mainītājiem,tad pieliec cheksumu tiem mainīgajiem kurus useris neievada ar roku. - laikam ar md5 taisa hashus(kontrolsummas) nevis kriptē, jo md5 parasti mirstīgie nevar atkriptēt. par mysql uzlaušanu - saki ka adminim jāiedot tavas lapas mysql userim pēc iespējas mazākas tiesības pieslēgties tikai no webservera ip, nekādi drop table utt.. Link to comment Share on other sites More sharing options...
blackhalt Posted December 30, 2005 Report Share Posted December 30, 2005 http://securephp.damonkohler.com/index.php/Main_Page p.s. forši, ja nezin tavas aizsardzības metodes ;) Link to comment Share on other sites More sharing options...
Grey_Wolf Posted December 30, 2005 Report Share Posted December 30, 2005 Mysql vismaz 2 dazaadi lietotaaji lapai tiesiibas Tikai taas kas tieshaam nepiecieshamas, peec iepeejas mazaak + pieslegties tikai no konkreetas adreses... otrs adminam .. Pie logoshanaas lapu nepaarmest uz reiz bet peec dazaam sekundeem.... stipri tiek apgruutinaats skriptu piemekleeshana... (teisim parmet uz lapu peec 2-5 sek starpaa izvadot kautko , Lapa tiek ielaadeeta ) neviens skripts nevarees kautcik reaalaa laikaa piemekleet paroli... (ja taa buutu teiksim 3-10 megjinaajumi sekundee tad ar laika nobidi tikai 20 meginaajumi minuutee :) ) ievadot pareizu useri un nepareizu paroli var uzlik kontrolsummu (cik nepareizi megjinaajumi var buut) peec kuras sasniegsanas dotajaa sessijaa..... pieslegties vairs nevar... (izdzeesis kokijus un megjinaas velreiz) Link to comment Share on other sites More sharing options...
hmnc Posted January 2, 2006 Report Share Posted January 2, 2006 tas jau sāk kļūt par paranoju!!! galvenās lietas, kurām vajadzētu pievērst uzmanību: skriptos: 1. SQL injection attack (magic quotes enable / mysql_escape_string) 2. globals off (lai nevar feikot variabļus) 3. uploadi, ja tādi ir (max stingra kontrole, kas tiek uploadēts) 4. paroles glabājam neatkriptējamā formā (md5() vienu reizi pietiks atliektiem galiem, ja neesi FIB db turētājs :DD) serverī: 1. register globals off 2. mysql pieejas tiesības juzveriem (publiskajam tikai standartu bez dropiem) 3. visus portus, visu lieko nafig ciet moš ko būšu ātrumā piemirsis... Link to comment Share on other sites More sharing options...
Toms Posted January 3, 2006 Report Share Posted January 3, 2006 (edited) md5 var atšifrēt 1 - 11 stundu ilgumā. Tā, ka es šifrētu md5(sha1($pass.'salt')) - kur salt nav random! "md5 parasti mirstīgie nevar atkriptēt." <-- parasti mirstīgie nemaz nezin, kas tas tāds. par 7. punktu, mana funkcija, vairāk neko citu neizmantoju: /****************************************************************************/ function MakeSafe($value) { // Sataisa < > u.c. par &, &nd; $value = htmlspecialchars($value); // Stripslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote if not integer if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } /* MakeSafe */ /****************************************************************************/ Edited January 3, 2006 by Toms Link to comment Share on other sites More sharing options...
bubu Posted January 3, 2006 Report Share Posted January 3, 2006 md5 neatšifrē, md5 hešam meklē kolīzijas. Un gribu redzēt, kā tu 20-simbolu garu paroli 11 stundu laikā "atšifrēsi". Link to comment Share on other sites More sharing options...
v3rb0 Posted January 3, 2006 Report Share Posted January 3, 2006 (edited) Toms: imo nav vajadzīgs pirms glabāšanas db ' > < & un ko vēl pārvērst par kaut ko citu. ir vajadzīgas vismaz divas f-jas caur kurām laist cauri textus, viena prieks ieliksanas sql'ā (principā tā pate mysql_real_escape_string) un otra priekš texta ielikšanas htmlā, te atklal kautk as kā htmlspecialchars. Edited January 3, 2006 by v3rb0 Link to comment Share on other sites More sharing options...
Toms Posted January 3, 2006 Report Share Posted January 3, 2006 Nu, es liekot iekš HTMLa nelaižu nekādus htmlspecialchars vairs.... bubu: runa iet par ierindas lietotāju parolītēm. Un, protams, zinu, ka nevis atšifrēšana, bet kolīzijas. Ja paurbsies bik dziļāk, tad sapratīsi, ka md5 vairs nav nekas īpašs. Link to comment Share on other sites More sharing options...
hmnc Posted January 3, 2006 Report Share Posted January 3, 2006 labāk htmlspecialčarus uzrīdīt uzreiz pie insertiem/updeitiem - nu nafig lieki gruzināt serveri pie izvades (piemēram jāizvada 40 palieli komentāri). Toms - dova atšifrē! varbūt iegūsi pasaules slavu atšifrējot md5 :D protams ne jau ar salīdzināšanu if ( $realhash == md5($testpass) ) :DD toms - "Ja paurbsies bik dziļāk, tad sapratīsi, ka md5 vairs nav nekas īpašs." hmm. kā tad tā - pēkšņi md5 vairs nav derīgs nekam... gribu tuvāku paskaidrojumu Link to comment Share on other sites More sharing options...
Toms Posted January 3, 2006 Report Share Posted January 3, 2006 hmnc, nevis atšifrēt, bet atrast kolīziju!!! Es par kolīzijām runāju, tas ir - atrast tādu tekstu, kas veido tādu pašu hash kā meklējamais! Un kolīziju var atrast ~10 stundās. Tātad nav vajadzības atšifrēt. Ja Tava parole būs "manaparole", tad es atradīšu tekstu "adjfkuad28ad", kuram būs tāda pati hash vērtība. Radās saprašana? Man slinkums tagad googlee meklēt sīkāku info, lai jums pierādītu... Link to comment Share on other sites More sharing options...
v3rb0 Posted January 3, 2006 Report Share Posted January 3, 2006 (edited) atrodi ~10 stundās ar parastam mirstigajam pieejamiem resursiem, kas veido šitādu hashu 2b894c415ddd41c78b4d8368dbd6ff62 tad ar ticēšu :) Edited January 3, 2006 by v3rb0 Link to comment Share on other sites More sharing options...
Toms Posted January 3, 2006 Report Share Posted January 3, 2006 FAQ hash funkciju zinjas :) Nemeklēšu kolīzijas tam tavam hash. MD5 attack Finding MD5 Collisions on a Notebook Our method takes approximately 8 hours on a notebook PC (Intel Pentium 1.6 GHz) Nav man vēlēšanās tērēt laiku, lai pierādītu, palasi mazliet un pats sapratīsi, ka "nepūšu pīlītes". Link to comment Share on other sites More sharing options...
hmnc Posted January 3, 2006 Report Share Posted January 3, 2006 ticēšu tikai tad, ja piemeklēsi tādu pašu hashu: ef5da4354da9ff96177ace24927d412c :) a kāda perdziņa nav ko patestēt?! Link to comment Share on other sites More sharing options...
Roze Posted January 3, 2006 Report Share Posted January 3, 2006 Nav man vēlēšanās tērēt laiku, lai pierādītu, palasi mazliet un pats sapratīsi, ka "nepūšu pīlītes". Patiesiibaa pie lielas veeleeshanaas tas notiek viss veel aatraak. Bet nu rainbow taable uz charset [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|\:;"'<>,.?/ ] ir 64 GB.. Nez kam tev tur jaabuut (webbankai) lai mirstigais juzeris ar ko taadu njemtos. Pie kam njem veeraa ka tas anyway ir bruteforce. Un ja tu uzmani savu mysql serveri (proti limitee piekljuvi tikai no fikseetaam adreseem) tad idejiski ja nav sql injekcijas iespeeja pie tiem md5 heshiem jau neviens netiek un iisti nav ko laust (ar ko saliidzinaat).. Ja gribas droshinaaties tad driizaak jaaskataas uz kaut kaadu Hardened php http://www.hardened-php.net/ un Apaches mod_security http://www.modsecurity.org/projects/modsec...ache/index.html Link to comment Share on other sites More sharing options...
Recommended Posts