Запретить пользователю получать данные путем изменения идентификатора через URL

0

Отображение пользовательских данных на странице по запросу:

$query = "SELECT * FROM COLLECTIONS WHERE uid = $_GET['user_id']";

Но проблема в том, что пользователь может видеть другие данные пользователей, изменяя этот uid. Как решить эту проблему.

  • 1
    Вам необходимо реализовать контроль доступа, проверяя, принадлежит ли коллекция зарегистрированному пользователю.
  • 4
    Другая проблема ... Ваш код уязвим для внедрения SQL и будет взломан, даже если вы экранируете входные данные! Вместо этого используйте подготовленные заявления .
Показать ещё 15 комментариев
Теги:

1 ответ

0

Возьмите ваш сайт в автономном режиме. СЕЙЧАС. Кто-то собирается либо стереть данные, либо украсть данные, либо ввести вредоносное ПО, которое было доступно всем вашим клиентам

Вдох. Вы купили себе некоторое время, считая, что это еще не было нарушено.

Небольшое подмножество мер безопасности, которые вам НЕОБХОДИМО принять

Эти смягчения в порядке "имеет самые большие непосредственные выгоды" для ", вероятно, наиболее важны", по одной проблеме. (Помимо номера 3, который смягчает от 4 до 32241 проблем равной или большей величины до номера 1.)

  1. Просмотрите каждый экземпляр каждого запроса базы данных и убедитесь, что вы никогда не используете двойные кавычки или . при определении строки запроса. Перестройте весь код обработки базы данных, чтобы использовать некоторую систему параметризованных SQL-запросов.
  2. Используйте библиотеку аутентификации или, по крайней мере, криптографическую библиотеку.
  3. Спросите о своей настройке в Security Stack Exchange, используя учетную запись, которая никоим образом не отслеживается на вашем веб-сайте. Даже для вашей компании, если ваш сайт связан с вашей компанией.

Зачем?

Да, я знаю, что этот веб-сайт, вероятно, важен и должен оставаться в стороне, чтобы люди могли его использовать. Но попробуйте следующее:

www.badwebsite.com/your/page/here?uid=1 OR 1

Все данные видны! Вы принимаете код от пользователя и запускаете его в своей базе данных. Теперь, если я решил удалить все ваши таблицы базы данных?

Это просто покрывает первый пункт, который я сделал. Пожалуйста, верьте, что для ваших пользователей существуют большие проблемы, если вы еще не сделали шаг 2, наименьшее из которых - сотни их учетных записей на других сайтах (например, Gmail, пример банка), которые стали известны киберпреступникам.

Взгляните на эту комикс:

Изображение 174551

Кроме того, в библиотеке запросов URL-адресов есть ошибка обработки юникода, и мы сохраняем пароли несолеными... поэтому, если мы соединим их с emoji, мы можем закрыть сразу три вопроса!

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

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

  • 1
    Эта инъекция "1;CREATE TABLE you_have_lost (number int);" не будет работать на клиентах MySQL от PHP, потому что они не поддерживают отдельные операторы SQL, разделенные точкой с запятой ( ; ) ... вместо этого вы просто получаете сообщение об ошибке, не выполняя запросы и не создавая таблицу .... если только вы не используете mysqli_multi_qeury () тогда ваш SQL инъекция будет работать ..
  • 0
    @RaymondNijland Спасибо. Можете ли вы придумать простую, понятную демонстрацию инъекции, которая будет работать в этом случае? Какой-то способ прочитать все данные? (Я не думаю, что SQL так плох, как JavaScript в этом отношении.)
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню