powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
14 сообщений из 14, страница 1 из 1
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32345074
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOT TIP №1

Кодируйте ввод пользователя перед тем, как вывести его на страницу – или куда-нибудь ещё!

ЯЗЫК: C#
ВЕРСИИ ASP.NET: 1.0 | 1.1
АВТОР: Jeff Prosise, http://www.aspnetpro.com/
ПЕРЕВОД: hDrummer

Превратите «плохой» ввод пользователя в «хороший», чтобы предотвратить взлом вашего веб-сервера.

Перед вами простая ASP.NET веб-страница – одна из тех, что показывают персонифицированное приветствие, состоящее из «Привет» с последующим добавлением имени пользователя, ввеённое им же, в ответ на нажатие кнопки «Нажми меня». Несмотря на свою простоту, страница содержит потенциально фатальную «дырку», с помощью которой могут быть поставлены под угрузу cookie, ваш веб-сервер и даже другие компьютеры, находящиеся за вашим брандмауэром. Найдёти ли вы эту «дыру»?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<html> 
  <body> 
    <form runat= "server" > 
      <asp:TextBox ID= "Input"  RunAt= "server"  /> 
      <asp:Button Text= "Click Me"  OnClick= "OnSubmit"  
        RunAt= "server"  /> 
       <asp:Label ID= "Output"  RunAt= "server"  /> 
    </form> 
  </body> 
</html> 

<script language= "C#"  runat= "server" > 
void OnSubmit (Object sender, EventArgs e) 
{
    Output.Text =  "Hello, "  + Input.Text; 
}
</script> 


Если вы подумали, что «дыра» касается строки, введённой пользователем, ваша мысль верна. Веб-страница никогда, НИ ПРИ КАКИХ УСЛОВИЯХ, не должна использовать необработанный пользовательский ввод. Почему? Потому что в этом случае страница становится восприимчивой к кросс-сайт скриптовым атакам (to cross-site scripting (XSS) attacks). Для демонстрации этого, запустите страницу и наберите следующий текст в поле ввода:
Код: plaintext
<script>alert('Опачки!')</script>


Нажмите кнопку «Нажми меня» и окно с сообщением появится в вашем браузере. Проблема? Когда вы нажали на кнопку, браузер интерпретировал ввод, как часть кода, которую необходимо выполнить. И если этот скрипт достаточно безвреден, то хакеры могут ввести далеко не такие безвредные скрипты. Даже написав такую простую страницу как эта, нельзя быть уверенным, что все посетители будут использовать её так, как вы задумали. (Заметьте, что если вы используете страницу с ASP.NET 1.1, ва надо будет добавить директиву <%@ Page ValidateRequest="false" %> вверху вашей страницы, чтобы увидеть окно с сообщением.)


Прим. переводчика: Честно говоря после этой поправки лично для меня ценность этого HotTip’a для меня значительно упала, но раз уж начал переводить, доведу дело до конца.


Решение проблемы довольно простое. Перед тем как отображать ввод пользователя на странице, используйте метод Server.HtmlEncode для HTML-кодирования этого ввода. Следующая страница функционально эквивалентна предыдущей, однако, благодаря HTML-кодированию, текст пользователя меняется пред выводом на страницу. Например, символы <> превращаются в < и > - что неприемлемо для XSS-атакующего.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<html> 
  <body> 
    <form runat= "server" > 
      <asp:TextBox ID= "Input"  RunAt= "server"  /> 
      <asp:Button Text= "Click Me"  OnClick= "OnSubmit"  
        RunAt= "server"  /> 
      <asp:Label ID= "Output"  RunAt= "server"  /> 
    </form> 
  </body> 
</html> 
  

<script language= "C#"  runat= "server" > 
void OnSubmit (Object sender, EventArgs e) 
{
    Output.Text =  "Hello, "  + Server.HtmlEncode (Input.Text); 
}
</script> 



Помните: пользовательский ввод является вредоносным по умолчанию и должен рассматриваться именно с этой точки зрения. Server.HtmlEncode превращает «плохой» пользовательский ввод в «хороший» и, может быть, спасёт ваш веб-сервер от взлома – или чего-нибудь похуже.
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32345081
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем, если эта идея понравилась, то буду стараться каждую пятницу выкладывать по HotTip'y. Если есть желающие присоединиться - you are welcome.
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32345176
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ощущение, что никому, кроме сябя самого, такой хакер не навредит. Почему - да потому, что исполнится введенный скрипт на клиентской стороне. Гыгыгы. А у кого эта клиентская сторона? Правильно - у хакера Так что пусть пишут хоть формат с://, только потом пусть не удивляются, почему у них же диск снесло :)

-- Tygra's --
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32345231
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то к концу перевода у меня сложилось мнение, что у автора статьи паранойя. Не потому, что статья такой направленности, а потому, что стиль изложения несколько параноидальный
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32345348
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
м.б. тут скорее SQL code injection'a надо бояться, а не клиентских скриптов...
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32345748
Фотография EvAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут речь о CSS - Cross Site Scripting и Data Tampering

Личного опыта у меня нет, но по слухам <%@ Page ValidateRequest="false" %> иногда фильрует и "правильный" ввод пользователя.
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32345822
Antropos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оно конечно выполняется на стороне клиента, но вот представим ситуацию гостевая книга или форум, пользователь вводит такой небольшой скриптик , а потом каждому кто твою гостевую пытается читать приходит приглашение на другой сайт, или просто или еще что :)
Оно все на стороне клиента, но достаточно для вреда.


tygra:

Ага, пропишет он этот формат, и у каждого кто эту гостевушку потом откроет форматнется :) :)
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32346235
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, действительно. Всё это безобидно до тех пор, пока не пишется в СУБД и не выводится где-то для других посетителей. Тот же алерт можно влепить в цикле с какой-нибудь нецензурщиной - и посещаемость сайта резко упадёт :(((
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32346310
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОно конечно выполняется на стороне клиента, но вот представим ситуацию гостевая книга или форум, пользователь вводит такой небольшой скриптик , а потом каждому кто твою гостевую пытается читать приходит приглашение на другой сайт, или просто или еще что :)
Оно все на стороне клиента, но достаточно для вреда.
авторВсё это безобидно до тех пор, пока не пишется в СУБД и не выводится где-то для других посетителей. Тот же алерт можно влепить в цикле с какой-нибудь нецензурщиной - и посещаемость сайта резко упадёт :(((

Эгегеге, вы об чем? Скрипт выполнится на клиентской стороне того, кто его отослал. Никакие другие клиенты его не увидят

-- Tygra's --
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32346320
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2tygra
это почему?
а если это действительно гостевая книга, которую просматривают все?
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32346390
Antropos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tygra:

Если вести речь о гостевой книге или форуме или чем-то подобном, то любые записи вначале вносятся в базу данных для хранения, а уже потом достается из нее и распечатываются на сайте. Соотвественно если кто-то ввел script то он впоследствий при распечатываний будет распечатан и запустится всем пользователям которые будут просматривать данный рессурс.

И исполняясь на стороне клиента он сможет принести вред всем кто посетит рессурс.
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32346765
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если так, то да. Но это естественно - в форумах проверять введенный текст.

А вот как автор статьи говорит - в приветствии, то тут совсем неудачный пример. Даже провальный.

-- Tygra's --
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32346777
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот потому я и сказал, что отдаёт паранойей. Видно автор боялся обвинения в пособничестве кибер-террористам.

Хотя надо сказать, что проверять введённый текст стало естественным совсем не давно. Да я думаю что ещё и не везде. Вот помнится пару лет назад чуть ли не в каждый чат зайдёшь, а там никаких проверок...

Весело было :)
...
Рейтинг: 0 / 0
HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
    #32347050
Antropos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У автора видать сердце доброе , пример слишком добренкий
Реальность если случается бывает зачастую похуже :-)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / HOT TIP #1Кодируйте ввод пользователя перед тем, как вывести его на страницу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]