HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>13 дек 2019</li>
2 <ul><li>13 дек 2019</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><h2>Как взламывают сайты и как их от этого защитить</h2>
4 </ul><h2>Как взламывают сайты и как их от этого защитить</h2>
5 <p>Если вы хотите, чтобы ваш сайт не взломали, не создавайте его. Рассказываем, почему взломать можно что угодно, и даём советы по защите.</p>
5 <p>Если вы хотите, чтобы ваш сайт не взломали, не создавайте его. Рассказываем, почему взломать можно что угодно, и даём советы по защите.</p>
6 <p> vlada_maestro / shutterstock</p>
6 <p> vlada_maestro / shutterstock</p>
7 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
7 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
8 <p>Если вы следите за IT-новостями, то регулярно слышите, что обнаруживаются утечки данных клиентов крупных компаний, находятся критические уязвимости в популярных приложениях, а серверы подвергаются атакам.</p>
8 <p>Если вы следите за IT-новостями, то регулярно слышите, что обнаруживаются утечки данных клиентов крупных компаний, находятся критические уязвимости в популярных приложениях, а серверы подвергаются атакам.</p>
9 <p>Безопасность - большая проблема в современном мире. Как жаль, что все эти крупные компании пишут такой плохой код. То ли дело я - мне взлом не страшен. Или страшен?</p>
9 <p>Безопасность - большая проблема в современном мире. Как жаль, что все эти крупные компании пишут такой плохой код. То ли дело я - мне взлом не страшен. Или страшен?</p>
10 <p>Почему вообще одни компании взламывают, а у других всё в порядке? Давайте разберёмся, как работают хакеры и как от них защититься.</p>
10 <p>Почему вообще одни компании взламывают, а у других всё в порядке? Давайте разберёмся, как работают хакеры и как от них защититься.</p>
11 <p>Главное - помнить, что не существует систем, которые невозможно взломать. Примите это как аксиому. Вопрос лишь в том, сколько времени уйдёт на то, чтобы вас взломать. Наша задача - сделать так, чтобы хакеры тратили на обход защиты так много времени, чтобы им было попросту невыгодно на вас нападать.</p>
11 <p>Главное - помнить, что не существует систем, которые невозможно взломать. Примите это как аксиому. Вопрос лишь в том, сколько времени уйдёт на то, чтобы вас взломать. Наша задача - сделать так, чтобы хакеры тратили на обход защиты так много времени, чтобы им было попросту невыгодно на вас нападать.</p>
12 <p>Примерный алгоритм взлома следующий:</p>
12 <p>Примерный алгоритм взлома следующий:</p>
13 <ul><li>попробовать обойтись без взлома;</li>
13 <ul><li>попробовать обойтись без взлома;</li>
14 <li>использовать известные способы взлома;</li>
14 <li>использовать известные способы взлома;</li>
15 <li>задействовать грубую силу;</li>
15 <li>задействовать грубую силу;</li>
16 <li>создать свой инструмент;</li>
16 <li>создать свой инструмент;</li>
17 <li>подойти к задаче с другой стороны и начать сначала.</li>
17 <li>подойти к задаче с другой стороны и начать сначала.</li>
18 </ul><p>Давайте вместе пройдём путь хакера и посмотрим, как он всё это делает.</p>
18 </ul><p>Давайте вместе пройдём путь хакера и посмотрим, как он всё это делает.</p>
19 <p><strong>ВАЖНО!</strong></p>
19 <p><strong>ВАЖНО!</strong></p>
20 <p><strong>Мы никого не взламываем и вам не советуем. Вся информация в статье предоставлена для того, чтобы вы научились защищать свои сайты и приложения.</strong></p>
20 <p><strong>Мы никого не взламываем и вам не советуем. Вся информация в статье предоставлена для того, чтобы вы научились защищать свои сайты и приложения.</strong></p>
21 <p>Представим, что хакер планирует доступ к аккаунту одного конкретного пользователя на конкретном сайте.</p>
21 <p>Представим, что хакер планирует доступ к аккаунту одного конкретного пользователя на конкретном сайте.</p>
22 <p>Лучший взлом - тот, которого не было. А чтобы получить доступ без взлома, нужно, чтобы пользователь сам предоставил вам все данные. Для этого используется социальная инженерия. И вот самые известные способы.</p>
22 <p>Лучший взлом - тот, которого не было. А чтобы получить доступ без взлома, нужно, чтобы пользователь сам предоставил вам все данные. Для этого используется социальная инженерия. И вот самые известные способы.</p>
23 <p>Нужно написать письмо человеку, представившись сотрудником компании, которой принадлежит сайт. Для этого можно подменить заголовки письма, чтобы пользователь подумал, что оно действительно пришло от официальных представителей.</p>
23 <p>Нужно написать письмо человеку, представившись сотрудником компании, которой принадлежит сайт. Для этого можно подменить заголовки письма, чтобы пользователь подумал, что оно действительно пришло от официальных представителей.</p>
24 <p>Содержание может быть следующим:</p>
24 <p>Содержание может быть следующим:</p>
25 "Здравствуйте, %юзернейм%! Мы получили информацию, что ваш аккаунт подвергся попытке взлома. Мы успели вовремя ликвидировать угрозу, но нам требуется доступ к вашему личному кабинету для проведения дальнейшего расследования. Для этого вы должны предоставить логин и пароль от своего аккаунта. Надеемся на ваше понимание и сотрудничество. С уважением, Василий Пупкин, руководитель отдела безопасности Название-Сайта.РУ"<p>Когда получаешь такое письмо, в первую очередь начинаешь переживать, что случилось что-то ужасное. И только когда эмоции улягутся, здравый смысл может затрубить о том, что это, скорее всего, мошенники.</p>
25 "Здравствуйте, %юзернейм%! Мы получили информацию, что ваш аккаунт подвергся попытке взлома. Мы успели вовремя ликвидировать угрозу, но нам требуется доступ к вашему личному кабинету для проведения дальнейшего расследования. Для этого вы должны предоставить логин и пароль от своего аккаунта. Надеемся на ваше понимание и сотрудничество. С уважением, Василий Пупкин, руководитель отдела безопасности Название-Сайта.РУ"<p>Когда получаешь такое письмо, в первую очередь начинаешь переживать, что случилось что-то ужасное. И только когда эмоции улягутся, здравый смысл может затрубить о том, что это, скорее всего, мошенники.</p>
26 <p>Вам вдруг пишет человек, который хочет знать о вас всё: откуда вы, чем увлекаетесь, любите ли животных, какая девичья фамилия вашей матери и так далее. Обычно этот человек выглядит как девушка или парень мечты - разве можно не доверять такой очаровашке?</p>
26 <p>Вам вдруг пишет человек, который хочет знать о вас всё: откуда вы, чем увлекаетесь, любите ли животных, какая девичья фамилия вашей матери и так далее. Обычно этот человек выглядит как девушка или парень мечты - разве можно не доверять такой очаровашке?</p>
27 <p>Вы, конечно, поддерживаете беседу, а потом общение вдруг сходит на нет. А через какое-то время вы замечаете, что не можете зайти на сайт. Произошло вот что: взломщик узнал ответ на секретный вопрос, который необходим, чтобы восстановить доступ к аккаунту.</p>
27 <p>Вы, конечно, поддерживаете беседу, а потом общение вдруг сходит на нет. А через какое-то время вы замечаете, что не можете зайти на сайт. Произошло вот что: взломщик узнал ответ на секретный вопрос, который необходим, чтобы восстановить доступ к аккаунту.</p>
28 <p>Вы получаете сообщение от друга или знакомого, в котором он просит зайти на сайт и проголосовать в конкурсе. После перехода по ссылке почему-то нужно заново авторизоваться, но, если это сделать, ничего не происходит. Вы закрываете вкладку, но уже слишком поздно.</p>
28 <p>Вы получаете сообщение от друга или знакомого, в котором он просит зайти на сайт и проголосовать в конкурсе. После перехода по ссылке почему-то нужно заново авторизоваться, но, если это сделать, ничего не происходит. Вы закрываете вкладку, но уже слишком поздно.</p>
29 <p>На самом деле это подставной сайт: у него может быть такой же дизайн и даже адрес как у настоящего, но это всего лишь муляж, который используется, чтобы вы сами ввели свои данные.</p>
29 <p>На самом деле это подставной сайт: у него может быть такой же дизайн и даже адрес как у настоящего, но это всего лишь муляж, который используется, чтобы вы сами ввели свои данные.</p>
30 <p>Чтобы защитить пользователей от взлома методами социальной инженерии, нужно постоянно информировать их о следующих вещах:</p>
30 <p>Чтобы защитить пользователей от взлома методами социальной инженерии, нужно постоянно информировать их о следующих вещах:</p>
31 <ul><li>Администрация никогда не запрашивает данные для входа на сайт.</li>
31 <ul><li>Администрация никогда не запрашивает данные для входа на сайт.</li>
32 <li>Никому нельзя сообщать одноразовые пароли или ответы на секретные вопросы.</li>
32 <li>Никому нельзя сообщать одноразовые пароли или ответы на секретные вопросы.</li>
33 <li>Нельзя переходить с вашего сайта на другие и авторизовываться на них. Особенно если ссылку они увидели в комментариях или получили личным сообщением.</li>
33 <li>Нельзя переходить с вашего сайта на другие и авторизовываться на них. Особенно если ссылку они увидели в комментариях или получили личным сообщением.</li>
34 - </ul><p>Если же в аккаунт пользователя кто-то заходит с другого устройства, отправьте письмо с инструкцией, что нужно делать, если это авторизовался не сам пользователь.</p>
34 + </ul><p>Если же в аккаунт пользователя кто-то заходит с другого устройства, отправьте письмо с инструкцией, что нужно делать, еси это авторизовался не сам пользователь.</p>
35 <p>Если не удалось выведать пароль у пользователя, то нужно идти дальше и пробовать уязвимости, которым подвержены практически все сайты. Самая известная из них - SQL-инъекция.</p>
35 <p>Если не удалось выведать пароль у пользователя, то нужно идти дальше и пробовать уязвимости, которым подвержены практически все сайты. Самая известная из них - SQL-инъекция.</p>
36 <p>SQL устроен так, что за один раз можно отправлять несколько запросов, которые разделяются точкой с запятой.</p>
36 <p>SQL устроен так, что за один раз можно отправлять несколько запросов, которые разделяются точкой с запятой.</p>
37 <p>Например, у вас на сайте есть форма входа, в которую нужно ввести логин и пароль. Чаще всего запрос, который отправляется для проверки пользователей, выглядит так:</p>
37 <p>Например, у вас на сайте есть форма входа, в которую нужно ввести логин и пароль. Чаще всего запрос, который отправляется для проверки пользователей, выглядит так:</p>
38 "SELECT * FROM users WHERE login = ' " . $login . "' AND password = ' " . $password . " ';"<p>Зная это, хакер может ввести в поле с паролем какую-нибудь команду-инъекцию. Например, такую:</p>
38 "SELECT * FROM users WHERE login = ' " . $login . "' AND password = ' " . $password . " ';"<p>Зная это, хакер может ввести в поле с паролем какую-нибудь команду-инъекцию. Например, такую:</p>
39 qwerty'; UPDATE users SET password = '12345' WHERE login = 'user_login<p>Тогда общий запрос будет выглядеть так:</p>
39 qwerty'; UPDATE users SET password = '12345' WHERE login = 'user_login<p>Тогда общий запрос будет выглядеть так:</p>
40 "SELECT * FROM users WHERE login = ' " . $login . "' AND password = 'qwerty'; UPDATE users SET password = '12345' WHERE login = 'user_login ';"<p>Здесь уже два запроса: первый пытается найти пользователя с указанными данными, а второй меняет пароль пользователя с логином<em>user_login</em>на <em>12345</em>. Если инъекция сработает, хакер сможет просто войти, воспользовавшись новым паролем.</p>
40 "SELECT * FROM users WHERE login = ' " . $login . "' AND password = 'qwerty'; UPDATE users SET password = '12345' WHERE login = 'user_login ';"<p>Здесь уже два запроса: первый пытается найти пользователя с указанными данными, а второй меняет пароль пользователя с логином<em>user_login</em>на <em>12345</em>. Если инъекция сработает, хакер сможет просто войти, воспользовавшись новым паролем.</p>
41 <p>Способов много. Например, можно запретить вводить кавычки, точки с запятой или ключевые слова из SQL. Но самый надёжный способ -<strong>передавать данные отдельно от запроса.</strong></p>
41 <p>Способов много. Например, можно запретить вводить кавычки, точки с запятой или ключевые слова из SQL. Но самый надёжный способ -<strong>передавать данные отдельно от запроса.</strong></p>
42 <p>Тогда СУБД будет воспринимать инъекцию не как часть запроса, а только как введённый пароль. Подробнее о защите от SQL-инъекций можно почитать<a>здесь</a>.</p>
42 <p>Тогда СУБД будет воспринимать инъекцию не как часть запроса, а только как введённый пароль. Подробнее о защите от SQL-инъекций можно почитать<a>здесь</a>.</p>
43 <p>Если пока ничего не сработало, хакер может пробовать брутфорс - перебор паролей. Он запустит специальный скрипт, который попытается авторизоваться в вашем аккаунте с помощью случайных паролей.</p>
43 <p>Если пока ничего не сработало, хакер может пробовать брутфорс - перебор паролей. Он запустит специальный скрипт, который попытается авторизоваться в вашем аккаунте с помощью случайных паролей.</p>
44 <p>Обычно сначала в ход идут самые распространённые варианты:</p>
44 <p>Обычно сначала в ход идут самые распространённые варианты:</p>
45 <ul><li>qwerty;</li>
45 <ul><li>qwerty;</li>
46 <li>12345;</li>
46 <li>12345;</li>
47 <li>0000;</li>
47 <li>0000;</li>
48 <li>password;</li>
48 <li>password;</li>
49 <li>dartvader и прочие.</li>
49 <li>dartvader и прочие.</li>
50 </ul><p>Лучшая защита в этом случае - ограничить количество попыток авторизации. О том, как это реализовать, можете почитать в <a>этой статье</a>.</p>
50 </ul><p>Лучшая защита в этом случае - ограничить количество попыток авторизации. О том, как это реализовать, можете почитать в <a>этой статье</a>.</p>
51 <p>Если ничего из этого не помогло, хакер может попробовать изучить исходный код страниц, чтобы определить, какие уязвимости есть у вашего сайта.</p>
51 <p>Если ничего из этого не помогло, хакер может попробовать изучить исходный код страниц, чтобы определить, какие уязвимости есть у вашего сайта.</p>
52 <p>В отдельной группе риска - те, кто пользуется CMS<em>(движки для создания сайтов):</em>взломщик может узнать, на чём работает ваш сайт, установить такой же движок себе и поискать уязвимости изнутри.</p>
52 <p>В отдельной группе риска - те, кто пользуется CMS<em>(движки для создания сайтов):</em>взломщик может узнать, на чём работает ваш сайт, установить такой же движок себе и поискать уязвимости изнутри.</p>
53 <p>Нужно всегда использовать последние версии движков, в которых уже устранили старые лазейки, а новые ещё никто не нашёл.</p>
53 <p>Нужно всегда использовать последние версии движков, в которых уже устранили старые лазейки, а новые ещё никто не нашёл.</p>
54 <p>Если точечный взлом не сработал, то хакер может пойти другим путём. Например, он попытается получить доступ к хостингу, на котором расположен сайт. Для этого он будет использовать все те же шаги, что и раньше, или попробует немного иначе.</p>
54 <p>Если точечный взлом не сработал, то хакер может пойти другим путём. Например, он попытается получить доступ к хостингу, на котором расположен сайт. Для этого он будет использовать все те же шаги, что и раньше, или попробует немного иначе.</p>
55 <p>Если на сайте есть возможность загрузить аватарку, то взломщик может попытаться передать через неё на сервер какой-нибудь скрипт. Например, файловый менеджер - так он сможет просматривать все файлы, которые есть на сайте. В том числе и те, в которых хранятся данные для подключения к базе данных.</p>
55 <p>Если на сайте есть возможность загрузить аватарку, то взломщик может попытаться передать через неё на сервер какой-нибудь скрипт. Например, файловый менеджер - так он сможет просматривать все файлы, которые есть на сайте. В том числе и те, в которых хранятся данные для подключения к базе данных.</p>
56 <p>Стоит добавить на сайт несколько проверок для всех форм загрузки файлов. Например, для изображений можно добавить такие:</p>
56 <p>Стоит добавить на сайт несколько проверок для всех форм загрузки файлов. Например, для изображений можно добавить такие:</p>
57 $imageFileType = strtolower(pathinfo(basename($file["name"]), PATHINFO_EXTENSION)); $check = getimagesize($file["tmp_name"]); //Пытаемся получить размеры изображения: если пользователь попробует загрузить какой-нибудь скрипт с расширением изображения, то будет возвращено false if($check !== false) { if($imageFileType == "jpg" || $imageFileType == "png" || $imageFileType == "jpeg" || $imageFileType == "gif") //Проверка расширения { //Файл можно загружать } }<p>Так взломщику не удастся загрузить ничего, кроме настоящих изображений. Но и тут защита не абсолютная, потому что вредоносный скрипт может содержаться внутри изображения.</p>
57 $imageFileType = strtolower(pathinfo(basename($file["name"]), PATHINFO_EXTENSION)); $check = getimagesize($file["tmp_name"]); //Пытаемся получить размеры изображения: если пользователь попробует загрузить какой-нибудь скрипт с расширением изображения, то будет возвращено false if($check !== false) { if($imageFileType == "jpg" || $imageFileType == "png" || $imageFileType == "jpeg" || $imageFileType == "gif") //Проверка расширения { //Файл можно загружать } }<p>Так взломщику не удастся загрузить ничего, кроме настоящих изображений. Но и тут защита не абсолютная, потому что вредоносный скрипт может содержаться внутри изображения.</p>
58 <p>Либо же он попытается подключиться к FTP и подменить серверные скрипты. А если он узнает логин и пароль для входа в phpmyadmin, то получит доступ ко всей базе данных.</p>
58 <p>Либо же он попытается подключиться к FTP и подменить серверные скрипты. А если он узнает логин и пароль для входа в phpmyadmin, то получит доступ ко всей базе данных.</p>
59 <p>Защититься от утечки можно шифрованием. Например, пароли лучше хешировать с помощью SHA-2, а важные персональные данные - кодировать шифром Виженера или чем посерьёзнее. Главное, чтобы у вас не украли ключи для дешифровки.</p>
59 <p>Защититься от утечки можно шифрованием. Например, пароли лучше хешировать с помощью SHA-2, а важные персональные данные - кодировать шифром Виженера или чем посерьёзнее. Главное, чтобы у вас не украли ключи для дешифровки.</p>
60 <p>Кибербезопасность - это невидимая война, в которой взломщики и специалисты по защите придумывают всё новые и новые способы укрепления баррикад и их обхода.</p>
60 <p>Кибербезопасность - это невидимая война, в которой взломщики и специалисты по защите придумывают всё новые и новые способы укрепления баррикад и их обхода.</p>
61 <p>Но если вы не работаете в компании мирового уровня, то вряд ли кто-то захочет тратить своё время на взлом вашего сайта. Особенно если вы защитите его от основных способов взлома.</p>
61 <p>Но если вы не работаете в компании мирового уровня, то вряд ли кто-то захочет тратить своё время на взлом вашего сайта. Особенно если вы защитите его от основных способов взлома.</p>
62 <a>Научитесь: Профессия PHP-разработчик с нуля до PRO Узнать больше</a>
62 <a>Научитесь: Профессия PHP-разработчик с нуля до PRO Узнать больше</a>