Автор Тема: XSS Fix  (Прочетена 15049 пъти)

v01d

  • Напреднали
  • *****
  • Публикации: 39
  • Distribution: Slackware
  • Window Manager: XFCE 4.6rc1
    • Профил
XSS Fix
« -: Mar 06, 2009, 00:07 »
Здравейте, имам малак проблем и искам да попитам как най-лесно
да се реши този XSS
Примерен код:

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

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

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

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: XSS Fix
« Отговор #1 -: Mar 06, 2009, 00:26 »
Елементарно - просто направи една проверка съществува ли такъв файл, преди да изпишеш <img src=...

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

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

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

« Последна редакция: Mar 06, 2009, 00:37 от gat3way »
Активен

"Knowledge is power" - France is Bacon

v01d

  • Напреднали
  • *****
  • Публикации: 39
  • Distribution: Slackware
  • Window Manager: XFCE 4.6rc1
    • Профил
Re: XSS Fix
« Отговор #2 -: Mar 06, 2009, 12:36 »
Благодаря за решението.
Не се бях сетил да направя проверка за съществиващ файл.
Активен

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: XSS Fix
« Отговор #3 -: May 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.
« Последна редакция: May 14, 2009, 14:30 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P