alexander_lamdan
@alexander_lamdan
Предприниматель и генеральный директор

Как некоторые пароли не ломают сайты или базы данных?

Я задавал вопрос про длину паролей и их генерируемость, теперь меня часто мучал вопрос такой.
Вот у меня есть пароль к примеру
f.zYN'w#"ec++q/j(i=cV4|WGjUe~=Mn,V^%.pPbfYhu?yPn#y

Там много скобок, и символов которые могут без проблем сломать любое хранение в базе данных, либо просто сломать сам код.
Многие переменные или код на сайтах сохраняют пароли в таком виде:
"тут пароль", `и тут пароль`
Теперь мне интересно стало, а почему такие пароли указанные выше не ломают БД и не ломают обработку в коде?
По факту многие разработчики заносят пароль в кавычки, либо как то по другому.
  • Вопрос задан
  • 169 просмотров
Пригласить эксперта
Ответы на вопрос 5
@alexalexes
Потому, что при передаче данных от пользователя и обратно нужно правильно использовать API между средами, которые обеспечивают стек технологий web.
Например, рассмотрим взаимодействие веб-сервера и сервера баз данных.
В этом месте стека, не все разработчики умеют в буквальном смысле "готовить" запросы, в которых есть входные параметры.
https://www.php.net/manual/ru/pdo.prepared-stateme...
Вместо того, чтобы использовать специальный порядок подготовки запроса SQL и данных к его выполнению, начинающие разработчики просто склеивают текст запроса с непосредственно данными, которые во входных параметрах (ну, работает же), что небезопасно, даже если экранировать данные (от кавычек и точки с запятой вы спасетесь, но не от union + произвольный запрос).
Это касается не только использования паролей в качестве данных, но и любых других данных, в особенности поступающих от пользователя.
Такие нюансы работы с интерфейсами можно найти и при использовании JSON, XML, кастомного создания пакета данных HTTP (привет попыткам отправить электронное письмо из веб-сервера с вложениями самописными скриптами), формирования HTML с пользовательскими данными.
Если взаимодействие правильно организовано, то суть данных не должно приводить систему в непредсказуемое состояние.
PS: В базу данных, вообще, можно записать blob с произвольными бинарными данными в одно поле, гигабайт размером - как здрасти. И в этом блобе будете искать кавычки?))
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Там много скобок, и символов которые могут без проблем сломать любое хранение в базе данных, либо просто сломать сам код.

Чего это? Символы как символы. Даже печатные из простого элементарного ASCII, а не смайлики разные.

При выводе данных куда-либо либо передаче куда-либо нужно элементарно соблюдать формат вот и всё. Если вам нужен JSON - будьте добры закодировать именно в JSON, а не конкатенировать входную строку как есть с кавычками похожими по виду. Нужно отправить с SQL запросом - prepared statemennts api к вашим услугам. Вывести в html? Вот вам htmlspecialchars предназначенный для корректного отображения произвольных данных в HTML. Всё просто и элементарно. Нет никаких "опасных хакерских символов". Есть разработчик проигнорировавший требования формата.

Это вообще про произвольные данные. А пароли в открытом виде и вовсе не хранятся. Из-за откровенно безалаберного обращения с паролями в PHP и вовсе существует отдельный password_hash.
Ответ написан
@Vitsliputsli
Хороший вопрос.
Для того чтобы избежать этой проблемы память любой программы делят на 2 части: область кода и область данных. Программа может писать в область данных, но не в область кода. В области данных может лежать что угодно, что бы там ни было, оно не вызывает никаких действий, т.к. это не исполняемый код, поэтому ничего поломать не может.
Часто бывает, что мы вынуждены в области данных хранить код, например для работы с СУБД, там хранится код SQL. Здесь безопасность контролирует программист, если он в этот код будет подставлять произвольные данные, то это может привести к поломке на стороне СУБД. В данном случае, это решается передачей кода SQL и изменяемых данных отдельно друг от друга.
Ответ написан
Комментировать
@GGHotDog
Можно сделать по разному, например в php есть htmlspecialchars который превращает опасные символы в безопасные
Ответ написан
Кто вообще в здравом уме хранит пароли? Сколько можно твердить постоянно об одном и том же? В базе данных не должны храниться пароли. В базе должны лежать минимум sha256. А по правильному там должен лежать результат многораундового хэширования и ещё с солью.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы