Jump to content
php.lv forumi

sql injection


Valcha

Recommended Posts

SQL injection parasti notiek tad, ja komentāros ievada pēdiņas. Piemēram tev ir jāievada leitotājvārds formā, un tu to salīdzini ar datubāzes ierakstiem:

SELECT COUNT(*) FROM tabula WHERE user_name = '$username'

Šajā gadījumā, ja tu speciāli neapstrādāsi $username mainīgo, un lietotājs tajā būs ielicis tekstu xxx' OR 1 -- tad skaties par ko būs pārvērties pieprasījums:

SELECT COUNT(*) FROM tabula WHERE user_name = 'xxx' OR 1 --'

Redzams, ka tiks selektēts jebkas, jo 1 nozīmē TRUE, tātad vienalga vai user_name lauks sakrīt ar to xxx vai nē.

No tā var izvairīties diezgan vienkārši - lietojot funkciju - mysql_escape_string(), kura padoto string vērtību pārveidot tādā formā, ka šīs pēdiņas netraucēs pieprasījuma izpildi.

Link to comment
Share on other sites

a ko noziimee tie miinusi "1--", bez miinusiem arii ir veelamais rezultaats...

 

bet ja tu speciaali nestripo slashus, tad jau serveris pac pieliek tos slashus, vismaz apacis pieliek.

Edited by рпр
Link to comment
Share on other sites

-- nozīmē komentāra sākumu, tas tāpēc, lai viss kas tālāk SQL kverijā, lai netiek ņemts vērā, jo nevar jau zināt, kas tur par brīnumiem :)

Un šis jau tikai viens piemērs. To injection var veikt daudz veidos.

PHP pats pieliek slešus tikai tad, ja ir eneiblētas magic quotes. Kuras neiesaka eneiblēt ātrdarbības dēļ. Citādi php jāiet visiem POST/GET datiem cauri un jāmeklē tās pēdiņas!

Link to comment
Share on other sites

aa jaa komentaari ir taadu, veel var rakstiit # taa jau vairaak pienjemts;

 

bet taadaa gadiijumaa magic quotes spaarda, jo ja uz servera ir vairaakas lapas, kuras tu neesi veidojis, tad no administratora viedoklja mieriigaaks praats.

Link to comment
Share on other sites

A padomā, ja tu to visu neliec iekš DB, bet glabā/izmanto kā citādi? Tad jau tas magic visus datus sačakarē, ja ievada pēdiņu, vai ne?

nu taadaa gadiijumaa tas ir atkariibaa no taa vai dati tiek vairaak saglabaati, kru vajag slashus vai nevajag. katraa gadiijumaa sanaak, ka vajag pielaagot serveri lai mazaak tiktu izmantots stripslashes vai addslashes. ja neglabaa db, tad arii var gadiities, ka vajag datiem slashus pievienot - saglabaa kaa php failu ar nodefineetiem mainiigajiem..

Link to comment
Share on other sites

php.ini magic quotes nav eneiblotas, bet tik un taa ir slashi jau defaultaa, neliekot nemaz addslashes...

un ko tev izvada šis?

echo get_magic_quotes_gpc(); // 1-enabled, 0-disabled

magic_quotes_gpc

Off Off

magic_quotes_runtime

Off Off

magic_quotes_sybase

Off Off

Link to comment
Share on other sites

Protams, ka obligāta! Tev patiktu, ja tagad es izpildītu tavā lapā SQL pieprasījumu DROP tabula; ?? :)

Un SQL injekcijas noteikti strādās tādās lapās, kurās izmanta datubāze datu glabāšanai, bet nav piemērotas nekādas ievadīto lietotāja datu kontroles (piemēram uz šīm pēdiņām).

Link to comment
Share on other sites

×
×
  • Create New...