Pereiti prie turinio

AR saugu naudoti tokį kodą?


Rekomenduojami pranešimai

PHP nesu kodinęs, bet ar prepared statements nėra patikimas būdas išvengti SQL injekcijų? Kokia alternatyva, `mysql_real_real_real_escape` ant kiekvieno argumento?

 

Prepared statements paskirtis nėra apsaugoti nuo injekcijų. Tikslas yra paruošti kokią tai nors užklausą, kad galėtum ją panaudoti dar kartą, su galimybe pakeisti argumentus. Logiškiausia prepared statements naudoti kokiame nors cikle arba kur tikrai reikia kreiptis į tą pačią lentelę daugiau nei 2 kartus.

 

Taigi, paruoši užklausą, ją įvykdai (iš viso kreipėsi 2 kartus į duomenų bazę), o kam to reikia, jeigu gali tik 1 kartą (iškarto įvykdyti)? Ir prieš įterpiant duomenis, filtravimas privalomas, simbolių suskaičiavimas irgi (po filtravimo sumažės arba padidės, priklausomai nuo panaudotos funkcijos).

 

p.s jei panaudoji prepared statements, tada taip, nereikia naudoti „::real_escape_string“, tačiau jeigu ne - turėtum. Viskas turi paskirtį, tai naudokite pagal paskirtį, o ne kažkieno išgalvotais mitais ar standartais.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pamiršai pridėti nuorodą į Github.

 

Nu kas čia dabar? :huh: Eik padaužyti savo galvą į sieną daugiau kartų, gal protingesnis tapsi ir suprasi, kad neprivalau įrodinėti savo žinių, taip pat nesi pasaulio bamba ar turintis aukštesnį stažą už mane. ^_^

 

... nebent siūlai darbą.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nu kas čia dabar? :huh: Eik padaužyti savo galvą į sieną daugiau kartų, gal protingesnis tapsi ir suprasi, kad neprivalau įrodinėti savo žinių, taip pat nesi pasaulio bamba ar turintis aukštesnį stažą už mane. ^_^

Nu tai tikėjausi, kad turėdamas tiek patirties ir tiek žinių apie spartą, kad gali pasiekti 0.02 greitį (!!!), tikrai būsi kokią open-source biblioteką parašęs, ar bent jau kokį savo projektą įsikėlęs parodyt... O dabar kaip užsikirtus ploktelė vis apie optimizuotą kodą šneki ir abejotinus patarimus dalini...

 

Galima dar kartą pasikartoti:

Premature optimization is the root of all evil -- DonaldKnuth

https://stackoverflow.com/questions/24988867/when-should-i-use-prepared-statements

https://asktom.oracle.com/pls/asktom/f?p=100:11:505682632181748::::P11_QUESTION_ID:1993620575194

Redagavo wi_lius
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prepared statements paskirtis nėra apsaugoti nuo injekcijų.

 

Išskyrus tą dalį, kuri 100% apsaugo nuo sql ijekcijų. Bent jau normaliose kalbose. :-)

 

 

 

Jei ne paslaptis, kokio dydžio ir kokio patirties pasiskirstymo komandose teko dirbti?

 

 

Edit: Appeal to authority: https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28with_Parameterized_Queries.29

Redagavo kashiukas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Išskyrus tą dalį, kuri 100% apsaugo nuo sql ijekcijų. Bent jau normaliose kalbose. :-)

 

 

 

Jei ne paslaptis, kokio dydžio ir kokio patirties pasiskirstymo komandose teko dirbti?

 

 

Edit: Appeal to authority: https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28with_Parameterized_Queries.29

 

Taip, apsaugo nuo SQL injekcijų, nes neįvykdo užklausos tiesiogiai. Bet neapsaugo nuo HTML žymių.

 

Jeigu visur naudosi prepared statements, tai projekto našumas bus tragiškas. Tarkime, 10 skirtinguose lentelėse įterpi duomenis ar juos atnaujini, taigi, su prepared statements bus 10 * 2 = 20 užklausų. Mikro optimizacijos klaida virsta į masinę optimizacijos klaidą, kuri kainuos 0.** sek. krovimo laiko padidėjimu, jeigu daugiau užklausų, virstų net į sekundes.

 

„::real_escape_string“ sunaudoja žymiai mažiau našumo.

 

Nu tai tikėjausi, kad turėdamas tiek patirties ir tiek žinių apie spartą, kad gali pasiekti 0.02 greitį (!!!), tikrai būsi kokią open-source biblioteką parašęs, ar bent jau kokį savo projektą įsikėlęs parodyt... O dabar kaip užsikirtus ploktelė vis apie optimizuotą kodą šneki ir abejotinus patarimus dalini...

 

Galima dar kartą pasikartoti:

 

https://stackoverflow.com/questions/24988867/when-should-i-use-prepared-statements

https://asktom.oracle.com/pls/asktom/f?p=100:11:505682632181748::::P11_QUESTION_ID:1993620575194

 

Eik iš naujo persiskaityti dokumentaciją.

 

https://joshduff.com/2011-05-10-why-you-should-not-be-using-mysqli-prepare.md

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip, apsaugo nuo SQL injekcijų, nes neįvykdo užklausos tiesiogiai. Bet neapsaugo nuo HTML žymių.

 

Ar tikrai reikia escapinti htmlą dedant į DB?

 

 

Apačioj parašyta, kad PDO pagal nutylėjimą naudoja client-side prepared statements.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...