» »

SQL injection

SQL injection

adrian007 ::

Torej.. prišel sem do odgovorov da je za sql varnost potrebno uporabljati addslashes() in mysql_escape_string().

Katere so še druge stvari s katerimi lahko zaščitiš napade na sql?

Zzzzzzz ::

ena izmed (dobrih) stvari je tudi predvidevanje vnosa.

primer: če npr. veš, da bo poslan parameter številka (npr. id zapisa v bazo), preveri, če je tudi res številka ali pa če pričakuješ točno določen string, uporabi regular expressions, da preveriš, če je pravi

Sergio ::

A PHP ne pozna Prepared statementov?
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

Ziga Dolhar ::

"PHP" jih pozna. Je pa to bolj stvar podatkovnega gonilnika oz. vmesnika za komuniciranje z njim.
https://dolhar.si/

Zgodovina sprememb…

Reso ::

Napadi so lahko tudi brez sql injectiona. Drugače pa ti ni treba uporabljati mysql_escape_string() ampak lahko typecastas vhodno spremenljivko v int, če veš da more biti vnos tipa int (tako kot je Zvonko rekel).

Primer napada brez sql injectiona je naprimer spreminjanje posta v forumu. Pri slabi kodi se ti lahko pojavi prijavljen uporabnik, ki sporoči id posta od drugega uporabnika in spremeni drugemu uporabniku post. Rešitev je čisto enostavno in je "UPDATE ..... WHERE id=$POST['id'] AND Owner=$UserId". Napačna koda pri update sql stavku nima "AND Owner=$UserId".

Malo se poglobi v logične stvari programa in preveri če imaš znotraj sql stavkov v pogoju vse kar je tebi na prvi pogled logično in mora vedno biti.

Brilko ::

Najbolj se lahka ušteješ v primeru, da ti nekdo noter vrine OR 1=1 >:D

Sej če maš magic quets vklopljene, nerabiš več filtrirat za slashi pri pridobivanju pdoatkov preko REQUESTO-ov...

CCfly ::

ADOdb in pear::db lepo poskrbita da so sql stavki ustrezno urejeni ("prepared").
"My goodness, we forgot generics!" -- Danny Kalev

Brilko ::

Ampak ni to njun primarni namen. ;)

AndrejS ::

MS SQL server pozna storedProcedures, za mySQL pa ne vem... tam pa ne more prit do SQL injection!

CCfly ::

Ne mislit, da so stored procedure univerzalna rešitev in da tam ne more priti do SQL injection napada. Pri stored proceduraš lahko dinamično generiraš SQL poizvedbe, kar pomeni da si v takem primeru sledil ljudskemu pregovoru, kjer greš iz dežja pod škaf. Boljša je politika: "All input is evil" pa če uporabljaš samo osnovne operacije, stored procedure, parametrizirane poizvedbe, ....
"My goodness, we forgot generics!" -- Danny Kalev

AndrejS ::

CCFly z MS orodji gre nekako takole :

With sqlCommand

.Connection = sqlConnection
.CommandType = CommandType.StoredProcedure
.CommandText = "spNekaj"

End With

With sqlCommand.Parameters

.Add("@RowGuid", SqlDbType.UniqueIdentifier).Value = newMessage.Guid
.Add("@ParentGuid", SqlDbType.UniqueIdentifier).Value = newMessage.ParentGuid
.Add("@ComposerGuid", SqlDbType.UniqueIdentifier).Value = newMessage.Composer.Guid
.Add("@Requests", SqlDbType.TinyInt).Value = newMessage.Requests

End With

Zdaj pa mi povej kje lahko tu pride do SQL injection !!!

MaCoFaCo ::

V TinyInt zabašeš ogromno cifro in baza se usuje :D :D :D
Šala seveda.

CCfly ::

Seveda, takoj ko mi ti najdeš napako v mojem umotvoru:
echo "AndrejS bo še enkrat prebral sporočilo enega od kolegov v debati, kjer sodeluje, in ne bo dodajal nepotrebnih klicajev v svoja sporočila."

SQL injection je pri uporabi stored procedur možen že ko v tej npr. stakneš skupaj dva niza (recimo kakšna implementacija iskanja). Nisem rekel, da se je zato potrebno izogibati stored procedur ali da so te slaba izbira, trdim pa da možnost zlorabe obstaja. Zaradi tega ne vidim razloga, da ne bi ustezno preverili podatkov, še preden izvršiš poizvedbo, že na aplikacijskem nivoju.
"My goodness, we forgot generics!" -- Danny Kalev


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

PHP in objektno programiranje (strani: 1 2 )

Oddelek: Programiranje
8511277 (9744) kivi113
»

Statistika dijakov, pomoc

Oddelek: Programiranje
211660 (1144) Mitja Bonča
»

Sql (.NET) problem

Oddelek: Programiranje
131060 (931) CWIZO
»

PHP Kodiranje

Oddelek: Izdelava spletišč
141332 (1209) sverde21
»

Izvorna koda mojega par dnevnega dela; ce jo malo pokomentirate :) (strani: 1 2 )

Oddelek: Programiranje
606183 (4528) Microsoft

Več podobnih tem