zaštititi MySQL od injection

1

zaštititi MySQL od injection

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

I ja naučih nešto novo. Ovo do sada nisam koristio i želim da unapredim ovu skriptu ali za sada ne shvatam kako.

Kod izgleda ovako:
$name = $_GET['username']; $password = $_GET['password'];   if ($stmt = $mysqli->prepare("UPDATE tbl_users SET password = ? WHERE name = ?")) {       // Bind the variables to the parameter as strings.     $stmt->bind_param("ss", $password, $name);       // Execute the statement.     $stmt->execute();       // Close the prepared statement.     $stmt->close();   }
a ja za sada radim ovako:
function edit($table, $array_cell_and_value, $array_where)    {       if($array_cell_and_value && $array_where)       {          foreach($array_cell_and_value as $y=>$x){$value[] = "`".trim($y)."` = '".$this->mysql->real_escape_string(trim($x))."'";}          foreach($array_where as $s=>$d){$where[] = "`".trim($s)."` = '".$this->mysql->real_escape_string(trim($d))."'";}          $edit=$this->mysql->query("UPDATE `".$table."` SET ".join(', ',$value)." WHERE ".join(' AND ',$where)." LIMIT 1");          return $edit ? true : false;       } else return die('PHP Error: <strong>$array_cell_and_value</strong> and <strong>$array_where</strong> is empty!<br />-Data not edited in MySQL!');    } $array=array( 'password' => $_GET['password'] ); $where=array( 'name' => $_GET['username'] ); edit('tbl_users', $array, $where);
Zanima me kao prepared statement da ubacim u moju funkciju. Stao mi malo mozak zbog $stmt->bind_param("ss", $password, $name); jer on miksuje stringove a ne prima array. GUZ - Glavom U Zid



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23208
  • Gde živiš: Niš

Mislim da prepared statements već imaju svoju vlastitu zaštitu od SQL injections... nije im potrebno escape-ovanje.



offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1627
  • Gde živiš: Pancevo

Ex taj DEPENDENCY INJECTION Very Happy

Sad ti vidi sta ces dalje, dao sam ti 99% resenje a ti vidi kako ces da iskoristis zavisnost ubrizgavanja.
Jako dobar pattern DI.

A mozes da iskoristis malo stariji princip (pattern) poznat kao Hollywood principle.
Njegova teorija je : don't call us, we'll call you

Ziveli

offline
  • PHP Developer
  • Pridružio: 02 Okt 2005
  • Poruke: 546

http://php.net/manual/en/pdo.prepared-statements.php
ovde kazuCitat:
The parameters to prepared statements don't need to be quoted; the driver automatically handles this. If an application exclusively uses prepared statements, the developer can be sure that no SQL injection will occur (however, if other portions of the query are being built up with unescaped input, SQL injection is still possible).

offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23208
  • Gde živiš: Niš

To i pričam.

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Da shvatam... Nikada nisam radio sa prepared statements pa me zanimalo koliko ima smsla da ga koristim i koliko je dobar. Ovu stranicu koju si |_MeD_| poslao nisam video. Onda mi je jasno šta da radim. Hvala svima!

offline
  • Pridružio: 10 Avg 2006
  • Poruke: 1009
  • Gde živiš: Beograd

Potpuno je bezbedan. Stim što imaj u vidu da ne možeš "LIMIT" deo upita parametrizovati koliko se ja sećam, tako da pazi kada praviš paginaciju ili tako nešto sprečiš injection na tom delu Smile

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

igorpan ::Potpuno je bezbedan. Stim što imaj u vidu da ne možeš "LIMIT" deo upita parametrizovati koliko se ja sećam, tako da pazi kada praviš paginaciju ili tako nešto sprečiš injection na tom delu Smile

Da taj deo je najbolniji. Ja inače čistim GET i POST funkcije, (negde sam to u forumu naveo) dodao sam i neke regular expression za database injection ako se prepozna neki upit da izbaci null tako da mislim da će to da zaštiti. Jedna klasa mi sve proverava pa sam tako uspeo kroz razne eksperimente da uradim "bezbednim". Hvala mnogo.

offline
  • m4rk0  Male
  • Administrator
  • Administrator tech foruma
  • Marko Vasić
  • Gladijator - Maximus Decimus Meridius
  • Pridružio: 14 Jan 2005
  • Poruke: 15766
  • Gde živiš: Majur (Colosseum)

Ako sam dobro razumeo ako koristimo prepared statements nisu nam potrebne sledece "mere zastite" od sql injectiona:
- real_escape_string
- Htmlentities
- addslashes
- trim

?

offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23208
  • Gde živiš: Niš

ako koristiš prepared statements - nije ti potreban mysql_real_escape_string i addslashes.

htmlentetities ti je potreban za zaštitu od ubacivanje malicioznog javasvcripta ili HTML-a - prepared statements te NE štite od toga.

trim nema nikakve veze sa merom zaštite - ta funkcija samo briše blanko/tab/enter na početku i na kraju stringa.

Ko je trenutno na forumu
 

Ukupno su 793 korisnika na forumu :: 32 registrovanih, 3 sakrivenih i 758 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., aramis s, babaroga, Brankoni, cenejac111, darkangel, Djole, dragon986, Drug pukovnik, El-Komadante, FOX, Gamer, goflja76, goxin, GveX, HrcAk47, krlebgd77, lekso, manda87, Markoni29, meelosh64, mercedesamg, MikeHammer, Nebo_M, neleinstruktor, proka89, Srle993, vasa.93, vathra, voja64, Zerajic, 79693