1. Kaip galima panaudojant CURL biblioteką išsiųsti duomenis POST metodu į HTML formą?

curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, 'laukelis=reiksme');

(kernius, fosron)

2. Kaip apsisaugoti, kad pašaliniai vartotojai neperimtų Jūsų vartotojo sesijos cookie rakto?
Armandas, tavo atsakymas logiškas, bet kai kuriems vartotojams kiltų dėl to kėblumų. SSL koduoja ryšio seansą, t.y. kad niekas nesuklastotų duomenų, kol jie keliauja iki vartotojo. Tad tinkamiausias atsakymas: sesijoje saugoti IP (e).

3. Kaip priversti naršyklę interpretuoti failą image. kaip paveiksliuką?
Nusiųsti atitinkamo paveiksliuko tipo mime antraštę (header(”Content-type: image/jpeg”);) (Eimantas, Armandas, kernius, fosron)

4. Ar įmanoma iškoduoti phpBB forumo kuriamą captcha ir kokiu būdu?
Taip, įmanoma su paveikslėlių analizavimo algoritmu. (Eimantas)

5. Kaip išsaugoti vartotojo slaptažodį duomenų bazėje (laukelis varchar(40)), kad pavogus duomenų bazę, nebūtų galima parinkti slaptažodžio?
arba md5 su šiek tiek druskos. (Eimantas, Armandas, e)
kam neaišku, paprasčiausias pvz:

 $pw = 'aaa'; $hash = sha1($pw.'xxx');

rezultatas bus hash, bet tai nebus $pw hash, todėl parinkti bus įmanoma tik ‘aaaxxx’ analogą, o ne ‘aaa’. Vadinasi, pavogus duomenų bazę, slaptažodžiai bus beverčiai, kol neturėsim “druskos” (angl. salt).

6. Kokią koduotę naudoti, kad tinklalapyje vienu metu atvaizduojami duomenys lietuvių, anglų bei rusų kalbomis būtų atvaizduojami tinkamai?
UTF-8, per lengvas klausimas…

7. Kada nebegalima naudoti funkcijų header(), session_start() ir pan.?
Tada, kai prieš jų naudojimą buvo pasiųstas nors vienas baitas tekstinės informacijos. Tačiau nuo tokių neapsižiūrėjimų gali apsaugoti ob_start(); (Eimantas, Armandas, e) Kuo netinka atsakymas “bet kokie duomenys”? header(), session_start() setcookie() irgi išveda “bet kokius” duomenis.

8. Kaip padaryti, kad klaidos atveju, klaidos pranešimas būtų ne išspausdinamas į ekraną, o išsiunčiamas e-paštu administratoriui, o į ekraną išvedamas kitas pranešimas?
set_error_handler(); error_log(); Aiškiausiai atsakė fosron.

9. Kaip išspausdinti HTML kodą (su įrašytomis kintamųjų reikšmėmis), kuriame yra kabučių ir spec. simbolių, nenaudojant “escape” priemonės (\”)?
HEREDOC stilius. (Eimantas, Armandas).

10. Kaip sukurti captcha, kad neiškoduotų botai ir negalėtų pildyti formų automatiniu būdu?
Animuotas gif, flash, audio įrašas su fononiu triukšmu. (Eimantas)
Tavo būdas labai sunkiai įgyvendinamas. Yra paprastesnis būdas, t.y. generuoti “background” iš atsitiktinai subraižytų linijų, tarp jų slėpti tos pačios spalvos ir storio raides. Analizatoriai nesupranta, o žmogaus akiai nėra labai sunku suprasti.

Panašūs straipsniai


“PHP klausimai #6 (atsakymai)” komentarų: 13

  1. Mindaugas

    Noriu pasitikslinti dėl:

    a) 2-as klausimas skamba taip “Kaip apsisaugoti, kad pašaliniai vartotojai neperimtų Jūsų vartotojo sesijos cookie rakto?”. Siūlomas atsakymas yra “Armandas, tavo atsakymas logiškas, bet kai kuriems vartotojams kiltų dėl to kėblumų. SSL koduoja ryšio seansą, t.y. kad niekas nesuklastotų duomenų, kol jie keliauja iki vartotojo. Tad tinkamiausias atsakymas: sesijoje saugoti IP (e).”. Manau reikia logiškai skirti du dalykus: “kaip apsisaugoti, kad kažkas neperimtu”, ir “kaip apsisaugoti, kad kažkas perimęs nepasinaudotu”. Kitaip sakant perimti ir pasinaudoti yra netolygūs dalykai, kartais vienas veda į kitą, bet ne visada. Manau šiuo atveju vienareikšmiško sprendimo, kuris apsaugotu vartotoją nuo jo cookio perėmimo nėra. Yra tik eilė priemonių, kurios padeda tą galimybę sumažinti iki skaičiaus artimo nuliui: *XSS*-free sait’as (kaip jau kažkas rašė), super-švarus-super-saugus vartotojo kompiuteris ir ryšys nuo jo iki svetainės.

    b) 5-as klausimas. Apie “druską”. Jeigu jau teikiamas pvz. su druska, tai reikėtų paminėti, kad ta druska negali būti tokia jau paprasta. Nes duomenų bazės pavogimo atveju, bandant bruteforsinti užkoduotus laukus, manau, kad pakankamai greitai bus tokia “druska” išsiaiškinta ir taip palengvintas koduotų duomenų dekodavimas. (Kitaip sakant jeigu du vartotojai turės slaptažodžius “123″ ir “aaa”, tai piktasis hackeris greitai supras, kad prie visų slaptažodžių buvo prideta “xxx”). Taip pat reikia nepamiršti, kad DB pavogimo atveju tikriausiai bus pavogti ir php failai, jeigu jie bus skaitomi, tai vėlgi, iš tos “druskos” jokios naudos.


  2. Mindaugai, man įdomų, ar bandėte paskaičiuoti kiek resursų reikės, norint “jėga” nulaužti ne žemo lygio vartotojo slaptažodį, o normalų, ne mažiau 8 skirtingų simbolių turinti slaptažodį su druską (nežinant druskos ir/ar kodavimo algoritmo)? Be to, svarbu, kad žmonės suprastu, kaip reikia saugoti. Jai perskaitęs šios klausimus ir atsakimus žmogus nesusimastę apie tai kaip jis saugo slaptažodžius ir nesuprato tos pagrindinės minties - pastaba “druska negali būti tokia jau paprasta” jam nepadės.

    DB pavogti yra pakankamai lengva,ypač jai tai PHP ir dirba naujokai ar tie kas mažai gauną už darbą.
    Dažnai galima rasti neapsaugota phpMyAdmin, kuris gali vienų iš adresų: /db/ /dba/, /phpmyadmin/, /pma/, /phpMyAdmin/, /phpadmin/, (dar kelėta paplitusiu variantų) ir jo pagalba gauti visą bazė. Failus jo pagalba gauti žymiai sunkiau.
    Dar prisijungimo duomenis galima gauti ir SQL-Injection pagalbą, kai programuotojai nesusimasto apie saugumą ar jiems per mažai moką, kad jie apie tai mastytų.
    Dar, kartais, kokiam kataloge netyčia galima gauti duomenų bazės kopija .sql faile ir ja parsisiųsti (atsarginės kopijos, ar panašiai).
    Kartais galima netgi pasijungti prie MySQL serverio su ‘root’ teisėmis…

  3. mitnick

    Mindaugai, saugumas reliatyvi sąvoka, jei žiūrėsim į saugumą kaip į “absoliutų saugumą”, vadinasi vienintelė galimybė savo HDD išlydyt ir kompiuterio daugiau nebenaudoti. Saugumas neegzistuoja. Parašyk super kodą, apsaugok priėjimą iki serverio ir t.t. - kam labai reikės, vistiek paims. Jei įsilaužia į visoius Pentagonus, NASAs ir pan., tai ką jau kalbėti apie kažkokio serverio saugumą? Daug tiekėjų išvis nesupranta apie serverio saugumą, kiek kartų mačiau visokių puslapiai.lt ir pan. duomenų bazių? Kad buvo pavogta - faktas - specialiai tikrinau, ar yra draugo duomenys - buvo. Jei jau žiūrėti iš tokios kritiškos pusės, kad vistiek gali kažką padaryt ir nafik apsauga, tai naudokim visur login admin ir passwd admin.

  4. Mindaugas

    ZaZa: dar pacituosiu Tau klausimą: “Kaip išsaugoti vartotojo slaptažodį duomenų bazėje (laukelis varchar(40)), kad pavogus duomenų bazę, nebūtų galima parinkti slaptažodžio?”. Gerai įsiskaityk. Paskui perskaityk atsakymą, kuriame teigiama, kad “druskos” pridėjimas apsaugo koduotus duomenis nuo dekodavimo. Man tai akvaizdu, kad atsakymas neteisingas. Nežinau, gal aš kabinėjuosi prie žodžių, bet man nepatinka, kai žmonėm pateikiama nelabai tiksli informacija, kaip sugadintame telefone iškreipiama tiesa.. o paskui taip ir sklinda internete “pridėk druskos ir tavo duomenų niekas neiškoduos”.

    mitnick: tai ir noriu atkreipti dėmesį, kad saugumas yra daugialypis, ir tokie atsakymai kaip 5-am klausimui yra nepriimtini, nes tam tikram ratui žmonių gali sudaryti neteisingą įspūdį/supratimą.

  5. kik

    mitnick, viską galima apsaugot (aišku ne fiziškai, nes fiziškai tai tikrai sutinku, kad to neįmanoma padaryti), bet vienur tai nenorima žiūrėti į saugumą - tik kuo greičiau padaryt ir eit namo, kitur vienam kodo žiūrėjimui skiriama per mažai darbuotojų ir per mažai laiko (kartais to beveik neįmanoma padaryti dėl per mažai pinigų/darbuotojų turėjimo). Aišku jeigu naudojiesi GNU/linux, Apache, MySQL, PHP Tu esi nuo jų priklausomas, ir jei jų programuotojai padarė klaidų tai čia jau yra kitas dalykas, ir norint nuo to apsisaugoti reiktų ypač daug laiko skirti visko pertikrinimui taip, kad tikrai nebūtų klaidų ir ypač saugumo spragų. Apie tos įrangos nustatymus nė nekalbu ir slaptažodžių parinkimą, nes tai savaime suprantamas dalykas. Deja dabar didelė dauguma lietuviškų hostingo kompanijų nė nesiruošia rimtai žiūrėti į programinės įrangos nustatymus, arba juos apžiūri paviršutiniškai. Todėl ir matėte puslapiai.lt MySQL’ą. Avita.lt duomenis ir pan.
    Tarkim http://www.tera.lt - buvęs http://www.talpykla.lt ir dar buvęs kažkokiu adresu, gavo pamoką tik tada kai buvo iš labai daug skirtingų IP adresų (kodėl iš tiek daug skirtingų, ogi todėl, kad buvo pasinaudota berods sandra [jei klystu tada kito viruso aukomis] viruso aukomis) gauta užklausų į serverį. Būtent apie tokius ne įsilaužimo, o serverio nukneckinimo atvejus mažai kas pagalvoja.
    Apie TVS programinį saugumą žiūri tik iš vienos pusės - iš kodo - ar pakankamai saugu. Deja labai mažai kas paima ir praleidžia TVS’ą pro saugumo tikrintojus, nors ir tų saugumo tikrintojų dar nėra tokių kurie ir pagal kodą ir pagal svetainės sugeneruotą turinį leistų rasti spragas.
    Netgi yra buvę, kad norint įsitikinti ar tikrai galima apsaugoti pakankamai buvo už įsilaužimą ir duomenų pavogimą gaunamas prizas, deja to prizo niekas negavo, nes niekas nepaėmė duomenų.
    Tai tiek. Įdomu kokia bus reakcija.


  6. Man nepatinką žodis koduotus ir dekoduoti. Hash’uotus - skambėtu geriau ir teisingiau.

    Viso šio reikalo tikslas - neleisti iš Hash gauti originalaus slaptažodžio, kuris gali tikti kitur (dažnai vartotojai tą patį slaptažodi naudoja keliems sistemoms).

    Kadangi Hash’avimas yra suspaudimas su praradimais - atvirkštinio proceso nėra. Vadinasi, tam kad mes sužinotume Hash’utą slaptažodį mes turime pereiti per visus įmanomus variantus, kol rasime tinkamą simbolių rinkinį, iš kurio gausime identišką ieškomam Hash, nebent mes naudojame žodynais ar Hash’u bazėmis.

    Perrinkti visus variantus, kol rasime tinkamą simbolių rinkinį, sugebės ne kiekvienas - reikia daug resursų. Žinant kad slaptažodis yra iš 6 simboliu ir net žinant “druską” jus turėsite mažiausiai 36^6 variantų, o tai jau 2,2 milijardų kombinacijų - be paralelių skaičiavimo procesų greitai nesugeneruosime reikiamo kiekio spėjimui. O su mažiausiai 3 simbolių “druską”, kurios nežinome, gaunasi didžiulis skaičius (102 trilijonai kombinacijų - nuomosite botnetą?), nors savaime aišku jums gali sektis, ir per artimiausius bandymus jus rasite kelis tinkamus Hash’us ir jų tam tikrą dalis sutaps. Beja, aš čia paskaičiavau labai idealiai, kai slaptažodis yra lygus 6 simboliams, o kur dar variantai kai slaptažodis trumpesnis?

    Turint druskos prie Hash’uojamų slaptažodžių ir pavogus bazė nežinant apie “druską” žodynai atkrentą - Hash’ai gausis gal ir tie, bet tai ne bus tie slaptažodžiai. Be to žodyne yra tik populiariausi žodžiai - ko užteks nebent standartinių vartotojų slaptažodžiams.

    Nebent jus turite didelė Hash’u bazė ir daug resursų, kad galėtumėte paėmė keletą Hash’u greitai gauti galimas jos reikšmes ir tai sulyginti, kol rasite atitinkamą variantą. Tik vat įdomų, kiek tokia bazė užimtu vietos ir kiek laiko užtruktų paiešką.

    Bet vat, tik nepagalvokite, kad “druska” šio atveju yra panacėja. Jokiais būdais. Prieš darant slaptažodžio Hash’ą reikia su tuo slaptažodžiu gerokai pažaisti, protingai ji modifikuoti, protingai pridėti ir “druskos”. Visoje toje apsaugoje turi buti netikėtumo faktorius, kurio nežinant iškodavimas tampa ne tai kad neįmanomas, bet ženkliai pasunkėja. O druską čia tik paprastas ir greitas budas, kuris apsaugas nuo taip vadinamų “cool-hacker”.

    O tokio tipo klausimai - yra puikus būdas priversti pradedančiuosius programuotojus susimastyti. Bent tuos, kas dar gali susimastyti.

  7. mitnick

    “Pažiūrėkit! Pažiūrėkit, jis netinkamą žodį pasirinko! Ar jūs matote? Na gi?! Pažiūrėkit!” OMG, Mindaugfai, suklydau rašydamas klausimą, dabar į pragarą mane? O tu žinai, kad vos ne 100% atsakė būtent taip, kaip ir klausiau? Va čia ir pasižymėjo žmonės savo LOGIKA ir parodė savo žinias, nes iš belekokio aprašymo supranta problemos esmę. Pagalba tiems, kurie atsakinėjo. O kodėl neatsakinėjo Mindaugas? Neišnešė smegenėlės tiek, kad suprastum mano kreivus klausimus? Visi suprato klausimą vienodai, t.y. butent taip, kaip ir norėjau parašyt. Tu man panašus į tuos klabininkus iš VLKK, kur kuria savo tiesas ir poto kabinėjasi prie žodžių.

    Beje, sakai, kad druskos pridėjimas NEapsaugo slaptažodžius nuo dekodavimo, tad tau užduotis (sha1): e63ab3ab52fb99dc7034c3b08c3d962f91421b10 (hint, 5 raidės, visos mažosios, lietuviškas žodis, aišku su trupučiu druskos). Žinant tiek informacijos, slaptažoždio parinkimas trunktų vos kelias sekundes, nes lietuviškų žodžių iš 5 raidžių nėra daug. PRAŠOM.

    Esmė tokia, kas nesuvokia, ką daro, vistiek nepadarys gerai, o gudrus sugalvos ne tik druskos pridėjimą. Aš nesu dievas ir perskaičius mano klausimą ir maždaug supratūs, kas klausta ir kas atsakyta, tai dar nereiškia, kad saugumas bus 100%.

    kik, su tavim sutinku dėl “vienur tai nenorima žiūrėti į saugumą - tik kuo greičiau padaryt ir eit namo, kitur vienam kodo žiūrėjimui skiriama per mažai darbuotojų ir per mažai laiko”.

    O dėl sandriškų atakų mažai ką padarysi, mane buvo užddosinę, sistemos loadas buvo ~1%, bet iš išorės nepasiekiamas, nes RX trafikas buvo užkimštas 100%, kas įdomiausia, kenkėjas kreipėsi į portus, kurie buvo DROP`ed, t.y. užklausos išvis nebuvo atsakinėjamos. Sprendimas? Gigabaitinė linija ir tikėjimas dievu. Taip galima užpult kiekvieną ir nuo to neapsiginsi.

    O dėl to prizo, gal tiesiog nebandė tas, kas sugeba? Čia irgi ne sprendimas.

    Aišku aš esu už saugumą, t.y. už bandyma visiais įmanomais būdais apsaugoti tiek duomenys, tiek tarnybinę stotį, kur jie yra.

  8. mitnick

    Neužmušk tik už tai, kad tavo vardą KLAIDINGAI parašiau, Mindaugai. Tikrai nepastebėjau iškast, velnias, koks aš nevykęs.

  9. kik

    mitnick, čia ne nulaužimas ;) O tera.lt nulūžo (žiauriai sulėtėjo ir berods reikėjo restarto) ne dėl tinklo stokos, bet dėl serverio kaltės ;) Dėl prizo, tai manau tikrai bandė, bet kai daug kas su statiškumu padaryta tai nelabai ką pakeisi, nelabai kaip tada jau išgausi, ypač kai nemažai prievadų neprieinami.

  10. mitnick

    ZaZa, mano tikslas toks ir yra, duoti idėjų pradedantiesiems, kad nesaugių puslapių kiekis nuo 97% sumažėtų bent iki 70% :) Patyręs programuotojas žinos, kur ieškoti informacijos, ir net uždavus klausimą apie jam nežinomą dalyką, jis ras reikalingos informacijos, ko (dažniausiai) nesugebės pradedantysis. Mokyt mokytus nėra prasmės :)

    ZaZa, dėl “(ne)koduoti duomenys” tai net nežinau ką ir sakyt, nelabai žinau hash atitikmens lietuvių kalboje.


  11. Mitnick, o tu atitikmenų ir nereikia. Bent man. Man visai patinka tokia žodžiai: hashas, kejbordas, mausas, internetas, blogas. O kai teisingas Lietuviškas žodis gali klaidinti, aš stengiosi šalia rašyti anglišką atitikmeni (vertijavimo praktiko parodė, kad toks sprendimas buna optimalus, kai verti techninė literaturą).

  12. Mindaugas

    Cituoju: “O kodėl neatsakinėjo Mindaugas? Neišnešė smegenėlės tiek, kad suprastum mano kreivus klausimus?”

    Tai ir nebėra apie ką daugiau kalbėt (-;

  13. NePo

    mitnick ir visi kiti gerbemieji kolegos, jeigu norite ginčytis dėl kodo teisingumo ir pateikti pavyzdžius kaip galima saugiau/geriau programuoti, labai prašom.
    BET asmeniniai įžeidinėjimai čia nėra toleruotini!

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.