169 похожих чатов

Кстати, а где-то используется base64 для защиты от инъекций? Что-то типа ``` def

check_login(email, password):
email_base64 = base64.b64encode(email).decode('ascii')
password_hash = bcrypt(password)
query = "select id, email from users where email = FROM_BASE64(email_base64) and password = password_hash"
```

21 ответов

17 просмотров

Security through obscurity

Dmitriy- Автор вопроса
Heart LESS
Security through obscurity

защита от инъекций ведь. Base64 не содержит кавычек

Dmitriy
защита от инъекций ведь. Base64 не содержит кавыче...

1) Base64 это не защита,sqmap может энкодить пейлоды(это если на автомате) 2) кавычки во многих случаях не работают

Dmitriy- Автор вопроса
Сергей Ермолов
1) Base64 это не защита,sqmap может энкодить пейло...

Почему не защита если это сделано на сервере? Клиент передаёт запрос как есть, сервер перед тем как представить запрос кодирует в base64

Dmitriy
Почему не защита если это сделано на сервере? Клие...

Потому что ты кавычку воткнешь внутрь base64

Dmitriy
Почему не защита если это сделано на сервере? Клие...

все-равно же декодировать придется, нет?

Dmitriy- Автор вопроса
molecrp
все-равно же декодировать придется, нет?

Так это уже какой-то MySQL делать будет. А он уже поймёт что эта кавычка не часть запроса

Dmitriy
Так это уже какой-то MySQL делать будет. А он уже ...

это точно? подтверждение есть тому, что он "поймет"?

Dmitriy
Почему не защита если это сделано на сервере? Клие...

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

Dmitriy- Автор вопроса
molecrp
это точно? подтверждение есть тому, что он "поймет...

Да, точно. По сути такой способ экранирования

Dmitriy- Автор вопроса
Anton Kirsanov 🐸
это защита, но через лишнее преобразование, которо...

Это да. Но видя какие тут велосипеды делают, возникает вопрос почему не сделать простой и надежный. С параметризацией кстати есть проблема на MySQL. Запросы с in (?,?,?) надо подготавливать n раз, по количеству разных значений в in. Т.е либо каждый раз два запроса вместо одного, либо утечка prepared statement’s (а из можно кешировать на сервере ограниченное количество)

Dmitriy
Это да. Но видя какие тут велосипеды делают, возни...

вообще наличие sql инъекций говорит об отсутствии, либо нарушении стандартов безопасной разработки, которые лучше отрабатывать не велосипедами, а повышением качества разработки, ревью, анализаторами кода. Все давным давно описано и написано, проблема ж не в том, что не придумали механизмы, а в том, что не умеют, не хотят, торопятся, забыли

Dmitriy- Автор вопроса
Anton Kirsanov 🐸
вообще наличие sql инъекций говорит об отсутствии,...

Не, ну так то да. Но всегда должно быть место велосипеду. Тот же телеграм - велосипед с т.з. крипты. Но работает ведь

Dmitriy- Автор вопроса

В mysql? Покажи, лол.

Dmitriy
Это да. Но видя какие тут велосипеды делают, возни...

Буквально зависит от языка и фреймворка

Dmitriy
В mysql? Покажи, лол.

CREATE TEMPORARY TABLE myvalues.... SELECT ... in ( SELECT value FROM MYVALUES )

Dmitriy- Автор вопроса
Личинка Кайтера
CREATE TEMPORARY TABLE myvalues.... SELECT .....

А в таблицу вы как вставлять данные будете? по одному с пакетом на запрос?

Dmitriy- Автор вопроса
Heart LESS
Через pdo и миграции

Выше решение было через подготовку времненой таблицы, а дальше select * where in (select from temptable). Но если изначально данные приходят от пользователя, то для вставки во временную таблицу (перед основным вызовом) все равно надо как-то защищать от инъекции при вставке в эту временную таблицу.

Dmitriy
А в таблицу вы как вставлять данные будете? по одн...

Пайплайнинг должны были завезти. Драйвер для мускула я писал лет 12 назад =)))

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
4
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта