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

Что такое пользовательский ввод?

Пользовательский ввод — это любая информация или данные, поступающие непосредственно от пользователя. Это может быть текст, введенный в поле формы на веб-странице, файл, загруженный пользователем, или даже URL-адрес, введенный в адресную строку браузера.

Будучи младшим специалистом в области кибербезопасности или даже просто веб-разработки, вы должны усвоить одно из первых золотых правил: Никогда не доверяйте вводу данных пользователем. Это все равно, что принять кусок торта от вашего озорного младшего брата — лучше сначала осмотреть его на наличие скрытого острого соуса!

Опасности доверия пользовательскому вводу

Доверять пользовательскому вводу без проверки или дезинфекции — все равно, что оставлять входную дверь открытой, пока вы в отпуске, надеясь, что никто не войдет и не поможет себе. Это открытое приглашение к неприятностям.

Давайте проиллюстрируем это на простом коде JavaScript. Здесь у нас есть базовая форма, которая принимает имя пользователя, а затем отображает приветственное сообщение с использованием этого ввода:

let userName = document.querySelector('#username').value;
let welcomeMessage = `Hello, ${userName}!`;

Это кажется безобидным, верно? Но что произойдет, если недобросовестный пользователь решит ввести что-то вроде:

<script> stealYourData(); </script>

Если вы слепо доверяете введенным данным и отображаете их на своем сайте, вы на самом деле запускаете их вредоносный код JavaScript! Это классический пример атаки с использованием межсайтовых сценариев (XSS).

Итак, как нам защитить себя?

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