Jump to content
php.lv forumi

Recommended Posts

Posted

sveiki! esmu uztaisiijis komentaarus, esmu ielicis strip tags, lai nevareetu useris raxtiit html-aa komentus. bet dzirdeeju, ka veel ir taada lieta, ka ljaunpraatis var arii izpildiit sql komandas, rakstot komentaarus. kaa no taa pasargaaties?

Posted

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.

Posted (edited)

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 рпр
Posted

-- 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!

Posted

foreach ($_REQUEST as $key => $value){

$_REQUEST[$key] = mysql_escape_string($value);

}

 

Ar nosacījumu, ka caur $_REQUEST netiek padoti masīvi ;)

Posted

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.

Posted

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?

Posted

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

Posted
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

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

Posted
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

Posted

Paldies par izsmeljoshajiem paskaidrojumiem, meegjinaashu pielietot. bet izsargaashanaas no sql injekcijaam ir obligaata? tb vai injekcijas iedarbosies jebkuraa lapaa?

Posted

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

×
×
  • Create New...