Linux за българи: Форуми

Сигурност => Сигурност на кода => Темата е започната от: v01d в Мар 06, 2009, 00:07



Титла: XSS Fix
Публикувано от: v01d в Мар 06, 2009, 00:07
Здравейте, имам малак проблем и искам да попитам как най-лесно
да се реши този XSS
Примерен код:

view.php
Код:
<?php
$file=$_GET['file'];
echo("<img src=\"upload/$file\">");
?>

Примерна атака:
view.php?file="+onmouseover=alert('xss')+

Как може това да се избегне ?


Титла: Re: XSS Fix
Публикувано от: gat3way в Мар 06, 2009, 00:26
Елементарно - просто направи една проверка съществува ли такъв файл, преди да изпишеш <img src=...

Ако не съществува - не изписвай нищо.

htmlspecialchars() в случая не помага, защото атаката не се нуждае от <script>, а е много дълбоко заблуждение, че без кавички не може да се направи нищо особено. Може и още как.

Хм, макар че в случая май ще помогне, защото името на картинката е в кавички и няма как да ги затвориш...



Титла: Re: XSS Fix
Публикувано от: v01d в Мар 06, 2009, 12:36
Благодаря за решението.
Не се бях сетил да направя проверка за съществиващ файл.


Титла: Re: XSS Fix
Публикувано от: VladSun в Май 14, 2009, 14:28
Внимавай ;)

Предполагам, че си използвал:
Код
GeSHi (PHP):
  1. $file=$_GET['file'];
  2. echo file_exists($file) ? "[+] ". $file : "[-]";

Тогава съществува XSS от вида:
index.php?file=image.png%00%3Cscript%3Ealert('xss')%3C/script%3E

т.е. използва се Null terminated string, при което file_exists() връща true (взима само частта до \0), а echo() игнорира \0.