Автор оригинала: vovanium
Что-то не похоже. Тебе уже много раз сказали, что чтобы не было инъекций, нужно проверять всё, что пришло от пользователя. Одной строкой тут не обойдешься, т.к. нужно знать какой контент ожидается.
Например, ты ожидаешь от юзера id и в запрос тупо без всяких проверок пишешь ...WHERE id = {$_GET['id']}, но ничто не мешает юзеру ввести к пример "12 OR 1=1", таким образом под условие уже попадают все записи. Вот поэтому нужно проверять каждую переменную на соответствие ожидаемому вводу...
Если у тебя конфиденциальные данные только в одной таблице, то и начни с проверки запросов к ней.
Я неплохо знаю что такое sql инъекция. Про какую-то "одну строку" я не писал.
Похоже что мне следовало сформулировать вопрос по другому.
Предположим необходимо построить защищенную систему. Ключевой момент в защите это защита нескольких столбцов в одной таблице.
Угроза - утечка данных, либо через хакерские действие либо через админов. Хотя через админов вариант и маловероятен, но хорошо защититься и в этом случае.
Защита строится из нескольких этапов
1. Написание надежного кода устойчивого к атакам.
2. ...
Никогда нельзя быть уверенным что на этапе 1 код действительно получится 100% надежный.
Вопрос состоит в том что можно сделать чтобы усложнить жизнь тем кто таки найдет уязвимость, любую, позволяющую вытащить секретные данные.
Единственный вариант который приходит мне сейчас в голову это шифрование важных столбцов.
Но где хранить ключи и как грамотно сделать подобное шифрование для меня вопрос. Да и я в целом не уверен что это особо защитит если "взломают" сайт.
Вообще подобная проблема наверняка уже рассматривалась многими, возможно есть у кого-то хорошие ссылки на статьи.
Я параллельно занимаюсь гуглением, но пока удовлетворительных результатов нет. К примеру для oracle есть возможность создавать шифрованные столбцы, всем остальным занимается сам oracle
p.s. zerkms, Alexandre
Интересно почему разработчики open source систем не следуют такому простому, "гениальному" совету и выпускают sql-injection уязвимые системы...
Эта фраза была лишней с моей стороны, не имеющая отношения к основному вопросу, поэтому не стал продолжать обсуждение по этому вопросу.