Pereiti prie turinio

Rekomenduojami pranešimai

Taigi sveiki nesenai pradėjau mokintis PHP kalbos. Ir pradžiai turiu kelis klausimus :)

1. Ar saugu ir patartina naudoti @extract? Jei nepatartina tai jei galite pasakykite jo kaip ir antrininką.
2. Kaip reikėtų apsisaugoti nuo SQL injekcijų. Pvz.: Kai nuorodos gale pridedi ženklą " ' "

 

Dėkoju iš karto :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

1. Patarčiau niekada nenaudoti šios funkcijos, nes ji skirta tik nesuprantamui ir nesaugiam kodui rašyti. Jei manai kad būtina ją panaudoti kažkokiu atveju, kažką ne taip darai - tikrai yra lengvesnių būdų.

 

2. Visą informaciją, kuri nėra patikima, escape'ink su atitinkamos duombazės funkcijomis(pvz. mysql_real_escape_string). Jei naudoji PostgreSQL, tai su pg_escape_literal kabutės automatiškai uždedamos, bet pvz. MySQL užklausose duomenim naudok kabutes, t.y. nerašyk item=$kintamasis, o rašyk item='$kintamasis'.

Redagavo DaliusK
Nuoroda į pranešimą
Dalintis kituose puslapiuose

 

Esu tingus ir patingejau skaityti, tai klausiu ar PDO yra smarkiai geriau saugumo atzvilgiu, taip pat egzistuoja dar kitas sprendimas MySQLi, kuo PDO geriau uz ji, neskaitant to, kad PDO yra universalus ir palaiko daug db o MySQLi tik mysql :rolleyes:

Redagavo Klicko
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Saugumo sumetimais visada reikėtu naudoti "prepared statements". Naudojant prepared statements, tu siunti SQL instrukcijas atskirai nuo parametrų, pvz.:

 

$sth = $dbh->prepare("INSERT INTO `vardai` SET `vardas` = :vardas");
$sth->bindValue(':vardas', $vardas);
$sth->execute();

 

Šiuo atveju duomenų bazė pirma gauna SQL instrukcijas ("INSERT INTO `vardai` SET `vardas` = :vardas"), išanalizuoja ir laukia parametrų. Kai gaunami parametrai - ivykdoma užklausa. SQL injekcijos metu būna pakeista pati SQL instrukcija, nes ji sulipdoma iš teksto ir kintamųjų. Naudojant prepared statements neįmanoma pakeisti pačios SQL instrukcijos, nes ji visada siunčiama tiesiog kaip tekstas (string).

 

Yra ir daugiau PDO privalumų, pvz. nebereikia naudoti "while ($row = mysql_fetch_array()) {}", užtenka "$sth->fetchAll()"

 

Kas liečia PDO vs MySQLi, tai renkuosi PDO vien dėl to, kad MySQLi neturi "named parameters", t.y. SQL instrukcijos atrodo maždaug taip:

 

$mysqli->prepare("INSERT INTO `users` SET `email` = ?, `username` = ?, pass = ?");

Todėl suvedinėjant parametrus ar pasikeitus eiliškumui lengva padaryti klaidą ir vėliau jos nepastebėti.

 

 

Edit: dar priminsiu skaitantiems, kad PHP grupė planuoja panaikinti ext/mysql (visas mysql_* funkcijas) saugumo sumetimais. Dar ne greitai, bet judama link to.

Redagavo alter
Nuoroda į pranešimą
Dalintis kituose puslapiuose

1. Nežinau, kam gali reikėti. Jei tai tik pora kintamųjų, visada gali padaryti rankomis:

$a = $arr['a'];
$b = $arr['b'];

Jei kintamųjų daug, tai nematau reikalo visus juos paberti į vardų erdvę. Kaip sakė DaliusK, nesuprantamas kodas gaunasi.

 

2. Pritarsiu alter - naudok PDO. Visada geriau prepared statementai, negu escapinti. Tuo labiau, kad PDO turi ir kitų privalumų, pvz. galėsi prisijungti prie kitos duomenų bazės vos pakeitęs jungimosi parametrus, nereiks keisti visų mysql_query į postgres_query (ar kaip tos funkcijos besivadintų). Na, čia aišku nekreipiant dėmesio į jau pačių DB SQL sintaksės skirtumus.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nuo injection naudok kazka panasaus:

function filter($i) {

$data = trim(htmlentities(strip_tags($i)));

if (get_magic_quotes_gpc())

$i = stripslashes($i);

$i = htmlentities($i);

$i = mysql_real_escape_string($i);

return $i;

}

$test = filter($_GET['TEST']);

Arba tiesiog:

function filtras($tekstas) {

$tekstas = preg_replace("#[^a-zA-Z0-9 ]#", "", $tekstas);

return $tekstas;

}

$test = filtras("!@#$%as^&*esu()_+'"); // Paliks tik raides ir skaicius be jokiu kitu simboliu.

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ą...