Автор Тема: java injection, XSS и прочее  (Прочитано 4614 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
java injection, XSS и прочее
« : 03 Февраля 2005, 13:22:37 »
Обрабатываю BB тэги, и не могу придумать универсальную регулярку, чтобы обработать переменную на наличие "javascript:" итп, Т.е. от "javascript:" не нужна, но ведь можно написать и так "j a v a s cript:" и скрипт выполнится. Можно записать "javascript:" и куча еще разных способов. Впринципе опасный тег только . Т.е. чтобы xss заработал надо либо "/^(j|&#106)\\s(a|&#97)\\s(v|&#118)\\s(a|&#97)\\s(s|&#115)\\s(c|&#99)\\s(r|&#114)\\s(i|&#105)\\s(p|&#112)\\s(t|&#116):/i
Поправьте, пожалуйсто, если что не так...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
java injection, XSS и прочее
« Ответ #1 : 03 Февраля 2005, 13:56:44 »
имхо надо отказаться от универсальной регулярки и для каждого ББкода сделать свою.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
java injection, XSS и прочее
« Ответ #2 : 03 Февраля 2005, 14:04:49 »
У меня только [img], [url] и [email]. Т.е. принцип один и тот же. Мне нужно защититься только от "javascript:", обойти ковычку не получится, т.е. до "style=\'background-image:url(javascript:" не дойти.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
java injection, XSS и прочее
« Ответ #3 : 03 Февраля 2005, 14:50:30 »
Я бы эти 3 одним регекспом не делал. Можно конечно, но слишком запутаный код получится.
Вот пример для URL-а :

function highlight_url($url) {
   if (
preg_match("~^(?:(?:https?)://(?:[a-z0-9_-]{1,32}".
   
"(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\\.)+(?:com|net|".
   
"org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?".
   
"!0[^.]|255)[0-9]{1,3}\\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&".
   
"?+=\\~/-]*)?(?:#[^ \'\\"&<>]*)?$~i",$url)) {
      return \'<a href="
\'.$url.\'" target="blank">\'.htmlspecialchars($url).\'</a>\';
   } else {
      return \'[ url]\'.htmlspecialchars($url).\'[/url]\';
   }
}
$str = "test 
[ url]http://ya.ru[/url] test 
[ url]javascript:alert(\'test\')[/url]";

echo preg_replace("~\\[url\\](.+?)\\[\\/url\\]~ei", "highlight_url(\'\\\\1\')", $str);

скорее всего форум некоторые слеши повырезает, поэтому смотри логику а не copy/paste
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
java injection, XSS и прочее
« Ответ #4 : 03 Февраля 2005, 14:55:51 »
как и ожидалось, форум удалил некоторые слеши
+
я вставил пробелы, чтобы он теги [url] в примере не парсил
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
java injection, XSS и прочее
« Ответ #5 : 03 Февраля 2005, 15:09:02 »
Ок. Спасибо. Но мне немного не то нужно. Мне нужно вырезать "javascript:" из указанной переменной... Т.е. мне не нужно проверять на правильность url`а. Мне нужно лишь распознать "javascript:"... А может есть какая-нить функциия встроенная, которая удалит яву?

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
java injection, XSS и прочее
« Ответ #6 : 03 Февраля 2005, 15:22:52 »
Цитировать
Tryapkonator:
но ведь можно написать и так "j a v a s cript:" и скрипт выполнится

в каком это броузере такое ?
firefox таким не страдает :

click here

First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
java injection, XSS и прочее
« Ответ #7 : 03 Февраля 2005, 15:38:57 »
Цитировать
Макс:
firefox таким не страдает :

А ты предлогаешь насильно заставлять всех поситителей ставить FF? =))) Есть такое. При написании javascript: можно использовать символы пробела, табуляции и переноса коретки. Вот такая вот лажа =(

Браузер - IE. В Опере не пробовал, но IE хватит =)

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
java injection, XSS и прочее
« Ответ #8 : 03 Февраля 2005, 15:55:19 »
хмм... в IE 6 у меня не сработало
так попробуй
$str = preg_replace("~\\s*j\\s*a\\s*v\\s*a\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t\\s*:~s", \'\', $str);
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
java injection, XSS и прочее
« Ответ #9 : 03 Февраля 2005, 15:59:06 »
Цитировать
Макс:
хмм... в IE 6 у меня не сработало так попробуй $str = preg_replace("~\\s*j\\s*a\\s*v\\s*a\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t\\s*:~s", \'\', $str);

Ок!! Спасибо!!! Только еще нужно предусмотреть "JaVaScRiPt:" и 16-ти ричную кодировку. Как я понял что-то типа

$str = preg_replace("~\\s*(j|j)......\\s*:~si", \'\', $str);

?

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
java injection, XSS и прочее
« Ответ #10 : 03 Февраля 2005, 16:22:56 »
Цитировать
Tryapkonator:
"java script:"

так ведь такая строка  будет вырезана этим регекспом
Цитировать
Tryapkonator:
16-ти ричную кодировку.

(j|\\xFF) - вместо \\xFF - должен быть реальный код
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
java injection, XSS и прочее
« Ответ #11 : 03 Февраля 2005, 16:42:46 »
Хм... я вставил именно 16-ти ричный, но форум обработал его и вывел "j"...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28