Munca cu bitii

Vineri, 17 Septembrie, Anul 2 d.Tr. | Autor: Mircea Popescu

Continut Platit

Acest articol nu este disponibil gratis.

Detalii mai jos :

Incepand de asta noapte am operat cateva modificari la modul in care Trilema livreaza articole. Sistemul cel nou e oarecum complex, asa ca sa-l explicam pe indelete.

Fiecare cititor (inteles in termeni de IP) poate citi cate trei articole diferite in fiecare zi (24 de ore). Odata cele trei epuizate, in locul articolului solicitat va primi o pagina care-i explica c-a depasit numarul de articole gratuite pe ziua respectiva, si-i ofera un link pentru mai multe detalii. In principiu eu scriu cam cate trei articole pe zi, plus-minus, asa incat ar trebui sa fie fix destul pentru a urmari Trilema in continuare fara probleme. De asemenea conversatiile n-ar trebui sa fie tulburate, cititorul poate lasa oricate comentarii doreste la cele trei articole pe care si le-a ales pentru ziua respectiva, si de asemenea poate citi de oricate ori pofteste comentariile lasate de altii. De notat ca termenul de 24 de ore curge subiectiv, functie de accesarile cititorului, nu exista o ora fixa pe server la care toata lumea isi reprimeste creditele.

Toate IP-urile noi (adica acele IP-uri care incarca pentru prima oara o pagina pe Trilema, de la introducerea acestui sistem) primesc un bonus de 24 de incarcari suplimentare. Asta inseamna ca pot incarca, pe langa cele 3 articole zilnice, inca 24 in total. Deci, citind azi 4, maine 10, poimaine 19 am ajuns la 0, si de-acum suntem limitati la cele 3 zilnice. De notat ca sistemul nu retine decat ultimele trei articole vizitate, si ca atare e posibil sa epuizati creditul incarcand doar 4 articole in ordine, 1,2,3,4,1,2,3,4 etc. In acest exemplu se uzeaza cate o unitate pe ciclu. De asemenea de notat ca odata plata realizata si creditul alocat sunteti identificat strict prin IP, daca ISP-ul aloca IP-ul dvs altcuiva tocmai ce v-a pagubit de niste incarcari suplimentare.

Paginile (precum de exemplu ), indecsii categoriilor (precum de exemplu http://polimedia.us/trilema/category/3-ani-experienta/) si arhivele (precum de exemplu http://polimedia.us/trilema/2010/08/) sunt accesibile fara restrictii, nefiind in nici un fel incluse in acest sistem.

Cititorii care nu doresc sa fie astfel limitati pot sa plateasca 5 euro, (puteti plati cu orice card Visa, nu-i nevoie sa aveti sau sa va faceti cont) in schimbul carora primesc 5000 de incarcari suplimentare. Avand in vedere ca la ora actuala Trilema are putin peste 1300 3000 de articole in total, 5000 de incarcari suplimentare ar trebui sa ajunga o vreme. Puteti de asemenea plati cu bitcoin : trimiteti un email care sa contina adresa dvs, dupa care trimiteti plata pe adresa 1JPvucRfu3ZzEvfBUQTJwsxMrZjeTqD6zR. Veti primi un numar de credite egal cu cantitatea de bitcoin trimisa x cursul BTCEUR x 1000.

Cititorii care nu doresc sa fie limitati dar nici nu doresc (sau nu pot, din orice motiv) sa plateasca in bani pot sa-si faca un cont pe fain, unde, dupa ce aduna 1000 de karma pot sa vanda 500 in schimbul incarcarilor suplimentare (specificati in email).

Cititorii care nu doresc nici sa fie limitati, nici sa plateasca si nici sa munceasca pot sa foloseasca un proxy, sa incarce Trilema de pe calculatorul prietenilor sau pe wireless-ul cafenelelor etcetera. Solutii sunt probabil multe, chiar daca m-ar mira sa merite.

In final, imi face placere sa anunt ca un numar de comentatori activi si inteligenti primesc 1000 de credite ex oficio. Lista, in ordine alfabetica : adi ; Anonimosu ; ByREV ; calmogen ; cipslim ; costin ; dAImon ; Diana Coman ; Dr.A ; F ; factor ; Florin ; Ionut ; krossfire ; Lucian ; Luka D ; Mari ; Marius ; McGogoo ; Mihai ; Porcul de York ; spyked. Lista ramane in principiu deschisa la dispozitia mea.

Uite ca pana la urma n-o fost chiar asa de complex. Sa ne auzim sanatosi dara. Pentru comentarii incercati aici.

Rubrica: 3 ani experienta
Puteti urmari raspunsurile prin fluxul RSS 2.0. Puteti lasa un comentariu ori trimite un trackback de pe blogul propriu.

26 Responses

  1. Mda, dar, spre exemplu, cand vrei sa cauti prin acea baza de date? Dai un select in base64? :)

  2. 2
    Mircea Popescu 
    Vineri, 17 Septembrie 2010

    Care-i problema ? Doar e transparent.

  3. Pai este transparent, dar ai niste limitari, daca inteleg eu bine schema:
    - nu poti sa faci cautari genul LIKE %whatever%
    - nu poti sa cauti dupa data din sql, daca encodezi si data
    - perfomanta nu va fi prea buna deoarece nu poti sa folosesti indecsi

    Si in plus, asta nu-ti rezolva toate problemele. Daca sa zicem ca aplicatia e una web, un user ar putea sa bage niste cod javascript in baza de date, care ulterior e posibil sa fie executat de useri, deci oricum mai trebuie sa bagi o gramada de sanitizari, pe langa care sql injection este una dintre cele mai simple de rezolvat.

    E o solutie, dar mi se pare prea inflexibila ca sa fie practica si nu cred ca merita dezavantajele doar pentru a te apara de sql injection. Sa zicem ca ai o aplicatie micuta, pentru care solutia asta functioneaza, dar cu timpul, aplicatia devine mai maricica. Ar trebui sa o modifici si sa o securizezi prin solutia clasica. Sau cazul in care aplicatia e pe interneti, deja se presupune ca tre sa poata sa intre milioane de oameni pe ea ca sa ai sansa de a face un ban de-o ciunga.

  4. 4
    Mircea Popescu 
    Vineri, 17 Septembrie 2010

    E adevarat ca nu poti face LIKE %%, da’ pe de alta parte hai sa fim seriosi, nici nu vrei sa faci asa ceva. Sau cu alte cuvinte, daca vrei sa faci asa ceva e o dovada ca ti-ai facut prost planificarea si tre’ sa reconstruiesti oricum.

    Data nefiind introdusa de utilizator, ci de MySQL nu intra in discutie.

    Clar ca poti folosi indecsi, de ce sa nu poti ?

    Dimpotriva, sanitizarea contra injectiilor de html/js se rezolva foarte usor, distrugind < la output (un alt aspect al programarii care nu-i indeobste bine tratat de mai nimeni, inclusiv de wordpress. Nu-i corect sa cureti tagurile la INTRARE, e corect sa inlocui < cu &lt ; la IESIRE.

    Acu tie ti s-o fi parind cum doresti sa ti se para, da io-ti spun din experienta ca nu-i, ci chiar dimpotriva. Si nu, faptul ca aplicatia e pe internet nu presupune ce presupui tu. Cind zic

    si anume, sisteme pentru care costul unei cresteri cu 33% a volumului datelor primite de la utilizatori depaseste costul unor programatori competenti care sa asigure codul

    ma refer la chestii semnificativ mai complexe decit orice exista pe internet.ro la ora actuala (absolut orice).

  5. Pai nu inteleg cum poti sa folosesti indecsi si cautari si alte minuni de baze de date cand tu ai in tabele niste hashuri. Cum faci sa-mi gasesti toti userii al caror nume contine Gigel si care s-au nascut intre 3 ian 1970 si 21 dec 2012?

    Eu ma gandesc ca ar trebui sa scoti tot tabelul din baza de date, il bagi in memorie, faci base64 decode la tot si apoi cauti, dar asta e cam ineficient, nu?

  6. 6
    Mircea Popescu 
    Vineri, 17 Septembrie 2010

    Deci tocmai am descoperit un bizar bug in wordpress. Exista in textul comentariului un </blockquote> inainte de ultimul paragraf, dar in html n-ajunge.

  7. 7
    Mircea Popescu 
    Vineri, 17 Septembrie 2010

    @Gheorghe Nu. “Select from table where nume =”. base64_encode (”Gigel”) && < DATE < etc.

  8. Pai da, dar am zis contine, ori daca ai fi avut un user Gigelina, ai fi ratat-o, si cu data tot nu am inteles. Ca sa poti cauta dupa date din baza de date, ar trebui sa ai o coloana de tip date, datetime, etc. care nu poate stoca hashuri base64 :)

  9. 9
    Mircea Popescu 
    Vineri, 17 Septembrie 2010

    Tu esti turc ? Ia vezi ca raspunsuri la aste doo nelamuriri se gasesc deja date in #4.

    Daca tu intrebi ceva si io-ti raspund nu poti continua tot pe ideea ta, ca de-aia ti-am raspuns, sa te lamuresc.

  10. Da, scuze, mi-a scapat aia cu data. Data e introdusa de mysql doar in cazuri simpliste in care iei doar data curenta sau ceva, daca iei data dintr-un formular, este introdusa de user, si deci poate fi introdus un sql inject pe-acolo.

  11. 11
    Mircea Popescu 
    Vineri, 17 Septembrie 2010

    E, eu inca n-am pomenit de caz concret in care sa trebuiasca sa-ti introduca userul data cu minutele lui. Tu cind ai introdus ultima oara o data intr-un formular pe web ?

  12. Cand imi cere yahoo data de nastere sa vada daca sunt sau nu minor spre ex.

  13. 13
    Mircea Popescu 
    Vineri, 17 Septembrie 2010

    Eu prefer sa rezolv chestia aia printr-un clickbox, “I was born on or before 16th of September 1992″. E o solutie mai buna din punctul de vedere al uzabilitatii, si incet incet incepe sa fie tot mai folosita.

    Alt exemplu ?

  14. Asta da, dar nu poti sa te limitezi la asa ceva. Daca faci urmatorul facebook si vrei sa stii cati ani au luserii, sa stii daca sa le vinzi sex toys sau scutece pentru batrani. Sau faci aplicatii care gestioneaza identitati de persoane, date de expirare ale cardurilor, si o gramada de alte chestii.

  15. 15
    Mircea Popescu 
    Vineri, 17 Septembrie 2010

    O gramada de chestii teoretice.

    In practica ramane cum iti zic.

  16. Haha, ok, daca tu zici ca n-o sa faci vreodata o aplicatie in care ceri o data unui user, te cred pe cuvant. Ideea e ca, nu mai suntem in anii 90, orice programator cu o oarecare bruma de competenta stie cum sa se apere de sql inject.

    Problema cea mai mare acum e in browsere, javascripturi, etc. E atat de complex incat nici cineva care cerceteaza non-stop vulnerabilitati in aplicatii web nu poate sa scrie cod 100% secure. Poate sa scrie din greseala cod cu vulnerabilitati bine cunoscute de el fara sa-si dea seama. Nu exista inca solutii absolute, un sistem infailibil de a scrie cod, deci din punctul asta de vedere, nu poti inlocui competenta unui programator. Macar unul sa ai mai rasarit, daca chiar te intereseaza subiectul securitatii.

  17. 17
    Mircea Popescu 
    Vineri, 17 Septembrie 2010

    Mda.

    Problema principala as zice c-o constituie pustii care dau din ei adevaruri universale pe baza chestiilor pe care le-au mai citit saptamana trecuta pe net, daca ma-ntelegi.

  18. Semne bune anul are. In curind vedem si polimedia in IE. Se lucreaza.

  19. Parca marianul nu mai trecea pe aici?

    In alta ordine de idei, data o poti construi din diverse dropdown boxuri sau si dac-o introduce omul cu manurile lui poti sa faci o verificare cu php inainte de a o baga in DB, si-i bistos treaba. Injectii sql in asa ceva inca n-am vazut.

  20. 20
    Mircea Popescu 
    Sambata, 18 Septembrie 2010

    Aia e compunerea dupa structura de care vorbeam.

    Normal ca verifici, dar ai la dispozitie isnumeric() ceea ce te ajuta mult. Da’ de verificat tre’ sa verifici, ca si dropdownu-i numa’ un form, n-are securitate.

  21. 21
    gheorgheinsigna de tehnologinsigna pentru 1000 de comentarii 
    Luni, 20 Septembrie 2010

    Tu prin schema asta ti-ai redus capacitatea de a face cautari prin baza de date, si pentru ce? Ca sa eviti probabil cea mai bine cunoscuta si cea mai bine documentata vulnerabilitate din toate timpurile. Ca aia care-au facut php-ul au fost idioti si n-au fost in stare sa faca o functie care escape-uieste niste caractere, asta e partea a doua, iar magic quotes a fost o idee stupida de la inceput. Daca n-ai incredere in competenta lor, fa-ti tu o functie, citeste codul sursa al parserului sql al lui mysql, sa fii sigur ca nu ascund developerii un caracter special ca backdoor sau ceva, etc.

    Sau hai inca 2 alternative: parametrized queries si proceduri stocate. Cred ca daca nu te deranjeaza sa ai 2/3 din baza de date hashuri base64 nu te deranjeaza nici sa tii codul sql in proceduri stocate.

  22. 22
    Mircea Popescu 
    Luni, 20 Septembrie 2010

    Inca o data mei, base64 nu reduce nimic deloc nicicum. Ca ti-e tie inconfortabil mental nu inseamna ca e inconfortabil masinii, din punctul ei de vedere nu exista nici un fel de problema, absolut, deloc. Acest text e la fel de descifrabil sau indescifrabil, procesabil sau neprocesabil pentru masina cum este si echivalentul lui in base64, cum este si echivalentul lui scris in baza 34, cum este si orice alt echivalent numeric.

    Motivul principal pentru care te-am tratat dismisiv la #17 este tocmai acest soi de privire subiectiva asupra aparatului, care denota in principiu o slaba culturalizare la nivelul fundamental. Calculatorul nu-i calul tau credincios din povestile cu Vestul Salbatic, calculatorul e o simpla si banala masina de calcul numerica.

    Alternativele din final se adreseaza altui nivel de programare. Eu discut aici de nevoile teoretice ale programatorilor de ordinul sutelor, nu miilor de dolari pe ora.

    Trecind peste astea, faptul ca-i cea mai bine documentata vulnerabilitate din toate timpurile nu spune neaparat ceva despre cit de usor de evitat este ea, cum pari sa sugerezi tu. Mariajul e si el cea mai bine documentata alegere gresita din toate timpurile, si cui serveste documentarea asta ?

    In fine, abordarea reductionista (cind afirmi ca eu fac X pentru Y, desi eu ti-am spus de 2 ori deja ca-i pentru Y, Z si K) dovedeste ca nu citesti cu prea multa atentie, sau daca nu, ca citesti pentru a-ti confirma presupozitiile mai degraba decit pentru a te informa.

    Ambele aceste doua defecte te descalifica de la a fi luat in serios, chiar daca altminteri tu probabil ai merita sa fii.

  23. 23
    gheorgheinsigna de tehnologinsigna pentru 1000 de comentarii 
    Luni, 20 Septembrie 2010

    Tot ce zic eu e ca lui mysql ii este incomfortabil sa caute text in hashuri base64. Atat am avut de zis, poti sa pui asta la dezavantaje :)

  24. 24
    Mircea Popescu 
    Luni, 20 Septembrie 2010

    base64 nu este un hash. Ca sa nu mai mentionez ca principala utilitate a unui hash este sa reduca timpii de cautare prin tabele, fie ele mysql sau altceva.

    Pune mina pe o carte. Pe bune, si spre binele tau iti zic.

  25. 25
    gheorgheinsigna de tehnologinsigna pentru 1000 de comentarii 
    Luni, 20 Septembrie 2010

    Ok, solutia ta e perfecta, ar trebui sa o bage default in toate enginurile de baze de date.

  26. 26
    Mircea Popescu 
    Luni, 20 Septembrie 2010

    Lmao aia ne-ar mai lipsi.

Am ceva de spus! »
    Daca nu ati mai comentat niciodata, comentariul dvs. va intra in moderare, unde va petrece in medie citeva ore. Dupa aprobarea primului comentariu, urmatoarele vor aparea direct, fara a mai intra in moderare.