Форма ввода текста - есть ли уязвимости?

Discussion in 'PHP' started by nick777, 30 Sep 2011.

  1. nick777

    nick777 New Member

    Joined:
    8 Oct 2010
    Messages:
    19
    Likes Received:
    4
    Reputations:
    1
    Вот есть форма ввода текста, человек вводит туда текст, этот текст обрабатывается и выдается ему на следующей странице. Если человек введет код вызова вредоносного кода, то что-нибудь случится?
    Все происходит по такой технологии:
    Человек заходит на страницу A, вводит текст, нажимает "Отправить", редирект на страницу B, страница B выдает пользователю обработанный текст. Никаких записей в БД не производится.
     
  2. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    xss называется
     
  3. TikTik

    TikTik Member

    Joined:
    20 Feb 2009
    Messages:
    241
    Likes Received:
    12
    Reputations:
    2
    ну введеные форму данные должны проходить проверку, можно так обрабатывать данные из формы что не получится ввести ни какой вредоносный код к примеру... запретив вводить символы и т.д..
     
  4. nick777

    nick777 New Member

    Joined:
    8 Oct 2010
    Messages:
    19
    Likes Received:
    4
    Reputations:
    1
    а как защититься от xss?
     
  5. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Заменять символы <, >, &, " на их соответствующие html-эквиваленты: &lt; &gt; &amp; &quot;. В php это делает функция htmlspecialchars.
     
  6. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Обходится, братюнь.

    Например:
    PHP:
    $a "<input type='text' value='".$_GET['q']."'>"; echo(strtr($a, array('<' => '&lt;''>' => '&gt;''&' => '&amp;''"' => '&quot;')));
    Обходик:
     
    #6 |qbz|, 1 Oct 2011
    Last edited: 1 Oct 2011
  7. nick777

    nick777 New Member

    Joined:
    8 Oct 2010
    Messages:
    19
    Likes Received:
    4
    Reputations:
    1
    А добавление пробелов не спасет? Т.е.
    < script type= " text/ javascript " src= "/ fpt/ _js/ worker. Js? Id=7/ 19/ 2010 6: 13: 17 pm ">
    Или спасет?
     
  8. nick777

    nick777 New Member

    Joined:
    8 Oct 2010
    Messages:
    19
    Likes Received:
    4
    Reputations:
    1
    И если вообще удалять все эти < и >?
     
  9. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Я общий случай привел. Если ты одинарные кавычки используешь в поле, то тогда и их заменять надо, естественно (на &#39;). Можно еще менять обратные слешы, и тогда вообще все хорошо будет.

    Плохой вариант. Лучше все сомнительные символы менять на их html-эквивалентные коды.
     
    #9 GRRRL Power, 1 Oct 2011
    Last edited: 1 Oct 2011
    2 people like this.
  10. nick777

    nick777 New Member

    Joined:
    8 Oct 2010
    Messages:
    19
    Likes Received:
    4
    Reputations:
    1
    ну вот там в тексте просто не нужно обычному пользователю использовать < или >, значит их будет использовать только взломщик, поэтому почему это плохой вариант?
     
  11. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Не, ну я то тебя понял, можно расценивать как придирку, просто не факт, что остальные будут фильтровать именно то, что надо, а не то, что ты скинул как пример. Стрип_тегс вообще можно забыть.
     
  12. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Если действительно не нужны какие-то символы, то можно их удалять. Либо прикрутить проверку введенного текста регулярным выражением, чтобы оно просто не пропускало невалидные символы.
     
  13. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Господи, развели тут демагогию. Обрабатывать данные надо там где надо и так как надо. В общем случае, необходимо и достаточно использовать htmlspecialchars, если предполагается вывод данных между тегами.

    Если выводимые данные используются внутри тега - обрамлять все это дело в кавычки, применить htmlspecialchars заменяя эквивалентами все кавычки плюс заменить прямой и обратный слеши. Вроде бы так?

    А вот удалять или запрещать - лучше не надо. Удаление может привести наооборот к увеличению числа уязвимостей и ложной уверенности, а запрещение - к неудовольствию пользователя, может он хотел поделиться какой нить формулой с неравенствами, а вы так нагло удалили некоторые символы
     
    _________________________
  14. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    В общем случае я применял такую последовательность: htmlspecialchars + замена одинарной кавычки и обратного слеша. После этого данные безопасны в плане XSS и SQL инъекций. Пожалуй, стоит еще нулевые байты убирать...
     
    #14 GRRRL Power, 1 Oct 2011
    Last edited: 1 Oct 2011
  15. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    GRRRL Power урл вида javascript://xss еще ж. Если мы ничего не забыли. htmlspecialchars нулл байт тоже заменяет
     
    _________________________
    1 person likes this.