Axtarış...

XPath inyeksiya zamanı nələri bilməliyik ?!

 XPath - XML sənədin müvafiq hissələrinə ixtiyari müraciət üçün nəzərdə tutulmuş bir dildir. SQL verilənlər bazası üçün nəzərdə tutulmuşsa XPath isə XML sənədlərin sorğuları üçün istifadə edilir. Nəzərə alsaq ki, XPath - da cədvəl, sütun və sətirlərin əvəzinə node - lar istifadə olunur.

 

XPath inyeksiyanın təhlükəliliyi nədədir ?!

XPath SQL - dən fərqlənən standart dildir. Hansı ki, zəif sintaksisə əsaslanan çoxlu sayda dialektə malikdir. XPath vasitəsilə bazanın bütün XML obyektlərini əldə etmık olar. Xatırladaq ki, bir çox hallarda biz sadə SELECT operatoru vasitəsilə verilənlər bazasının bütün obyektlərini əldə edə bilmirik.

NÜMUNƏ 1

Təsəvvür edək ki, bizim XML baza və autentifikasiyamız var :

<?xml version='1.0' encoding='ISO-8859-1'?> <users>
<user>
<id> 1 </id>
<username> admin </username>
<password> xp8th! </password>
</user>

 <user>
<id> 2 </id>
<username> test </username>
<password> test987 </password>
</user>

<user>
<id> 3 </id>
<username> bigolnerd </username>
<password> nerdsneedlovetoo </password>
</user>
</users>

Autentifikasiyanı reallaşdıran kod :

String username = req.getParameter("username');
String password = req.getParameter("password');
XPathFactory factory = XPathFactory.newInstance();

Xpath xpath = factory.newXPath();
File file = new File("/usr/webappdata/users.xml');

InputSource src = new InputSource(new FileInputStream(file));
XPathExpression expr = xpath.compile("//users[username/text()=' " +
username + " ' and password/text()=' " + password + ' ']/id/text()');

String id = expr.evaluate(src);

Bu kod XML sənədi yükləyir və sorğu vasitəsilə İD - ni alır, hansı ki, istifadəçinin daxil etdiyi login və şifrə ilə əlaqəlidir. Güman etmək olar ki , bu "admin" və "xp8th!". Belə olduğu halda :

//users[username/text()='admin' and password/text()='xp8th!'] /id/text()

 Heç bir digər yoxlama həyata keçirilmir və bizim tanış olan ` və ya '1' = '1; olarsa, o zaman :

//users[username/text()='admin' and password/text()='' or '1'='1' ]/id/text()

1=1 doğru verdiyinə görə sorğu bizə admin istifadəçisi üçün İD dəyərini göndərəcək

NÜMUNƏ 2

Təsəvvür edək ki, bizim belə bir XML sənədimiz var :

<?xml version="1.0" encoding="utf-8" ?>
<orders>
<customer id="1">
<name>Bob Smith</name>
<email>bob.smith@bobsmithinc.com</email>
<creditcard>1234567812345678</creditcard>
<order>
<item>
<quantity>1</quantity>
<price>10.00</price>
<name>Sprocket</name>
</item>

<item>
<quantity>2</quantity>
<price>9.00</price>
<name>Cog</name>
</item>
</order>
</customer>
...
</orders>

Verilənlər bazasının yerinə niyə görə XML istifadə edək ?!

 Əksər XML tətbiqetmələr XML verilənlər baza dampı istifadə edirlər. Əgər sizin saytınızın verilənlərinin qorunması üçün XML və istifadəçilərin daxil olması sorğuların qurulması üçün istifadə olunursa onda bu XPath inyeksiya üçün boşluq yaranır.

DİQQƏT !!!!!!! XPath inyeksiyadan necə qorunmaq olar ?!

Ən yaxşı üsul əlbətdə ki, proqramçıların istifadəçi verilənlərindən aldığı yalnız söz və simvollarını yoxlamaq olardı. Təcrübə göstərir ki, bu üsul da tam olaraq XPath inyeksiyanın qarşısını almır. Lakin tam olaraq təhlükəsizliyi təmin etmək üçün necə ki, SQL inyeksiyada təhlükəsizlik simvolları addslashes () funsiyası vasitəsilə aradan qaldırılırdısa, həmçinin Backslash (\) əlavə etməklə XPath insyeksiyanı praktik olaraq mümkünsüzləşdirmək olar.

 

© 2011-2024 Bütün Hüquqlar Qorunur