HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Представим, что мы сидим в чате и во время разговора сайт просит нас еще раз авторизоваться - ввести логин и пароль. Возможно, случился сбой, поэтому мы вводим свои данные. Но в итоге сообщение пропадает, и через пару минут нас выкидывает из чата, а пароль больше не подходит.</p>
1 <p>Представим, что мы сидим в чате и во время разговора сайт просит нас еще раз авторизоваться - ввести логин и пароль. Возможно, случился сбой, поэтому мы вводим свои данные. Но в итоге сообщение пропадает, и через пару минут нас выкидывает из чата, а пароль больше не подходит.</p>
2 <p>Любые проекты, чаты и сайты пишут люди. Чем крупнее проект, тем больше шансов, что у сайта или приложения найдутся так называемые "дыры" - незащищенные участки, которыми могут воспользоваться злоумышленники.</p>
2 <p>Любые проекты, чаты и сайты пишут люди. Чем крупнее проект, тем больше шансов, что у сайта или приложения найдутся так называемые "дыры" - незащищенные участки, которыми могут воспользоваться злоумышленники.</p>
3 <p>В этом уроке мы познакомимся с понятием уязвимости и разберем одну из самых простых в исполнении атак - XSS</p>
3 <p>В этом уроке мы познакомимся с понятием уязвимости и разберем одну из самых простых в исполнении атак - XSS</p>
4 <h2>Уязвимости и атаки</h2>
4 <h2>Уязвимости и атаки</h2>
5 <p>Цели злоумышленников при атаках на сайты или приложения обычно следующие:</p>
5 <p>Цели злоумышленников при атаках на сайты или приложения обычно следующие:</p>
6 <ul><li>Кража персональных данных пользователей</li>
6 <ul><li>Кража персональных данных пользователей</li>
7 <li>Кража аккаунтов</li>
7 <li>Кража аккаунтов</li>
8 <li>Кража банковских данных</li>
8 <li>Кража банковских данных</li>
9 <li>Передача вирусов на компьютеры пользователей</li>
9 <li>Передача вирусов на компьютеры пользователей</li>
10 </ul><p>Чтобы преступники не достигли их, на помощь приходят специалисты, которые занимаются "этичным хакингом". Их называют пентестерами - от английского PenTester, или специалистами по проникновению. Их задача - проанализировать сайт или приложения, найти незащищенные места и определить, как этим может воспользоваться злоумышленник.</p>
10 </ul><p>Чтобы преступники не достигли их, на помощь приходят специалисты, которые занимаются "этичным хакингом". Их называют пентестерами - от английского PenTester, или специалистами по проникновению. Их задача - проанализировать сайт или приложения, найти незащищенные места и определить, как этим может воспользоваться злоумышленник.</p>
11 <p>Также предотвратить атаки могут тестировщики, хоть они и не являются специалистами по информационной безопасности. Но они могут проверить сайт на самые базовые и распространенные виды атак. Это не закроет все проблемы с безопасностью, но простые способы взлома можно исправить без привлечения специалистов.</p>
11 <p>Также предотвратить атаки могут тестировщики, хоть они и не являются специалистами по информационной безопасности. Но они могут проверить сайт на самые базовые и распространенные виды атак. Это не закроет все проблемы с безопасностью, но простые способы взлома можно исправить без привлечения специалистов.</p>
12 <p>Существует два самых распространенных типа атак:</p>
12 <p>Существует два самых распространенных типа атак:</p>
13 <ul><li>Cross-site Script (XSS)</li>
13 <ul><li>Cross-site Script (XSS)</li>
14 <li>SQL Injection</li>
14 <li>SQL Injection</li>
15 </ul><p>В примере про чат злоумышленник смог отправить под видом сообщения HTML-разметку с формой для авторизации. В этой ситуации слабым звеном оказалось окно с выводом сообщения. Разработчики не предусмотрели, что можно отправить любую HTML-разметку вместо сообщения, и она будет выведена на экране.</p>
15 </ul><p>В примере про чат злоумышленник смог отправить под видом сообщения HTML-разметку с формой для авторизации. В этой ситуации слабым звеном оказалось окно с выводом сообщения. Разработчики не предусмотрели, что можно отправить любую HTML-разметку вместо сообщения, и она будет выведена на экране.</p>
16 <p>В этом случае говорят, что злоумышленник нашел уязвимость и использовал ее.<strong>Уязвимость</strong>- это недостаток в системе, с помощью которого можно нарушить работу всей системы или отдельной ее части. Одна из таких уязвимостей связана с возможностью отправки кода через формы на сайте или в приложении. Атака, которая использует эту уязвимость, называется XSS. Разберем ее подробнее.</p>
16 <p>В этом случае говорят, что злоумышленник нашел уязвимость и использовал ее.<strong>Уязвимость</strong>- это недостаток в системе, с помощью которого можно нарушить работу всей системы или отдельной ее части. Одна из таких уязвимостей связана с возможностью отправки кода через формы на сайте или в приложении. Атака, которая использует эту уязвимость, называется XSS. Разберем ее подробнее.</p>
17 <h3>XSS</h3>
17 <h3>XSS</h3>
18 <p>Когда злоумышленник отправил вместо обычного сообщения разметку на HTML, он использовал атаку<strong>Cross-Site Scripting</strong>или<strong>XSS</strong>. Сокращение начинается с буквы "X", чтобы не было путаницы с языком стилей CSS. При XSS должен выполниться любой сторонний код, который был передан на сайт. Это может быть:</p>
18 <p>Когда злоумышленник отправил вместо обычного сообщения разметку на HTML, он использовал атаку<strong>Cross-Site Scripting</strong>или<strong>XSS</strong>. Сокращение начинается с буквы "X", чтобы не было путаницы с языком стилей CSS. При XSS должен выполниться любой сторонний код, который был передан на сайт. Это может быть:</p>
19 <ul><li>HTML-разметка</li>
19 <ul><li>HTML-разметка</li>
20 <li>JavaScript код</li>
20 <li>JavaScript код</li>
21 </ul><p>То есть код, который может выполниться в браузере любого пользователя. Такому типу атак подвержены все элементы на странице, в которые можно ввести текст, например, поля форм.</p>
21 </ul><p>То есть код, который может выполниться в браузере любого пользователя. Такому типу атак подвержены все элементы на странице, в которые можно ввести текст, например, поля форм.</p>
22 <p>Для примера создадим такой сайт и отправим код в незащищенное поле. Код - обычный JavaScript код, в котором выводится сообщение для пользователя в отдельном окне:</p>
22 <p>Для примера создадим такой сайт и отправим код в незащищенное поле. Код - обычный JavaScript код, в котором выводится сообщение для пользователя в отдельном окне:</p>
23 <p>Так выглядит страница до ввода сообщения со скриптом:</p>
23 <p>Так выглядит страница до ввода сообщения со скриптом:</p>
24 <p>При вводе сообщения со скриптом браузеры всех пользователей автоматически выполнят скрипт, так как в чате нет защиты от XSS:</p>
24 <p>При вводе сообщения со скриптом браузеры всех пользователей автоматически выполнят скрипт, так как в чате нет защиты от XSS:</p>
25 <p>Это происходит, потому что браузер обрабатывает все символы в сообщении, в том числе и служебные, такие как &lt;, &gt;. Чтобы безопасно вывести сообщение и не выполнить код, используется замена символов на мнемоники.</p>
25 <p>Это происходит, потому что браузер обрабатывает все символы в сообщении, в том числе и служебные, такие как &lt;, &gt;. Чтобы безопасно вывести сообщение и не выполнить код, используется замена символов на мнемоники.</p>
26 <p><strong>Мнемоники</strong>- специальные символы, которые браузер не обрабатывает как код. Такой процесс называется экранированием символов и повсеместно используется в программировании.</p>
26 <p><strong>Мнемоники</strong>- специальные символы, которые браузер не обрабатывает как код. Такой процесс называется экранированием символов и повсеместно используется в программировании.</p>
27 <p>В примере выше, чтобы защититься от выполнения кода, стоит заменить все символы &lt; на мнемонику \&amp;lt;, а символы &gt; на \&amp;gt;. Браузеры не умеют обрабатывать такой текст как код, но для пользователя все символы вернутся в исходное состояние.</p>
27 <p>В примере выше, чтобы защититься от выполнения кода, стоит заменить все символы &lt; на мнемонику \&amp;lt;, а символы &gt; на \&amp;gt;. Браузеры не умеют обрабатывать такой текст как код, но для пользователя все символы вернутся в исходное состояние.</p>
28 <p>Для тестирования XSS используются два способа:</p>
28 <p>Для тестирования XSS используются два способа:</p>
29 <ol><li>Если переданная строка в форме где-то отображается после отправки, то возможно отправить любой HTML-тег с текстом. Например, &lt;h1&gt;Hello&lt;/h1&gt;</li>
29 <ol><li>Если переданная строка в форме где-то отображается после отправки, то возможно отправить любой HTML-тег с текстом. Например, &lt;h1&gt;Hello&lt;/h1&gt;</li>
30 <li>Вместо HTML воспользуйтесь кодом на JavaScript, как в примере выше. Действие функции alert() будет заметно сразу</li>
30 <li>Вместо HTML воспользуйтесь кодом на JavaScript, как в примере выше. Действие функции alert() будет заметно сразу</li>
31 </ol><p>Необходимо взять примеры из этого урока и вставить их в поля формы тестируемого сайта. Будет нагляднее, если результат выводится сразу, например, как у формы комментариев. Также нужно представить себя злоумышленником, который ищет уязвимость в проекте.</p>
31 </ol><p>Необходимо взять примеры из этого урока и вставить их в поля формы тестируемого сайта. Будет нагляднее, если результат выводится сразу, например, как у формы комментариев. Также нужно представить себя злоумышленником, который ищет уязвимость в проекте.</p>
32 <p>Если ни один из способов не сработал, значит, простыми способами атаку не использовать. Это не означает, что уязвимостей нет, но так отсекаются самые распространенные способы, которыми любят пользоваться начинающие хакеры.</p>
32 <p>Если ни один из способов не сработал, значит, простыми способами атаку не использовать. Это не означает, что уязвимостей нет, но так отсекаются самые распространенные способы, которыми любят пользоваться начинающие хакеры.</p>
33 <p>Чтобы проверить сайт на XSS, необходимо проанализировать все поля, в которых пользователь может оставлять текст. В большинстве случаев это происходит в формах, поэтому проверка на XSS происходит во время тестирования форм.</p>
33 <p>Чтобы проверить сайт на XSS, необходимо проанализировать все поля, в которых пользователь может оставлять текст. В большинстве случаев это происходит в формах, поэтому проверка на XSS происходит во время тестирования форм.</p>
34 <p>При использовании XSS атака происходит на пользователей, а не на сам сайт и его внутреннюю структуру. В противовес такому подходу используют атаку под названием SQL Injection. Она направлена на базу данных сайта.</p>
34 <p>При использовании XSS атака происходит на пользователей, а не на сам сайт и его внутреннюю структуру. В противовес такому подходу используют атаку под названием SQL Injection. Она направлена на базу данных сайта.</p>
35 <h3>Выводы</h3>
35 <h3>Выводы</h3>
36 <p>В этом уроке мы базово рассмотрели тему информационной безопасности и простых атак на веб-приложения. Так как тема безопасности большая для одного урока, то мы остановились на одной из простых в исполнении атаки - Cross-site Script.</p>
36 <p>В этом уроке мы базово рассмотрели тему информационной безопасности и простых атак на веб-приложения. Так как тема безопасности большая для одного урока, то мы остановились на одной из простых в исполнении атаки - Cross-site Script.</p>
37 <p>XSS простая, но ее последствия не настолько безобидны. С помощью XSS можно получить данные о пользователе или подсунуть ему поддельную форму регистрации.</p>
37 <p>XSS простая, но ее последствия не настолько безобидны. С помощью XSS можно получить данные о пользователе или подсунуть ему поддельную форму регистрации.</p>
38 <p>Суть уязвимости состоит в том, что не обрабатываются поля формы, поиска, комментариев. Если разработчики не экранируют символы в таких полях, то появится возможность отправить и выполнить вредоносный код на сайте или в приложении</p>
38 <p>Суть уязвимости состоит в том, что не обрабатываются поля формы, поиска, комментариев. Если разработчики не экранируют символы в таких полях, то появится возможность отправить и выполнить вредоносный код на сайте или в приложении</p>
39 <p>С опытом вы сможете тестировать большое количество разных атак и дополнительно защищать приложение от злоумышленников.</p>
39 <p>С опытом вы сможете тестировать большое количество разных атак и дополнительно защищать приложение от злоумышленников.</p>