Отображение пользовательских данных на странице по запросу:
$query = "SELECT * FROM COLLECTIONS WHERE uid = $_GET['user_id']"
;
Но проблема в том, что пользователь может видеть другие данные пользователей, изменяя этот uid. Как решить эту проблему.
Возьмите ваш сайт в автономном режиме. СЕЙЧАС. Кто-то собирается либо стереть данные, либо украсть данные, либо ввести вредоносное ПО, которое было доступно всем вашим клиентам
Вдох. Вы купили себе некоторое время, считая, что это еще не было нарушено.
Эти смягчения в порядке "имеет самые большие непосредственные выгоды" для ", вероятно, наиболее важны", по одной проблеме. (Помимо номера 3, который смягчает от 4 до 32241 проблем равной или большей величины до номера 1.)
.
при определении строки запроса. Перестройте весь код обработки базы данных, чтобы использовать некоторую систему параметризованных SQL-запросов.Да, я знаю, что этот веб-сайт, вероятно, важен и должен оставаться в стороне, чтобы люди могли его использовать. Но попробуйте следующее:
www.badwebsite.com/your/page/here?uid=1 OR 1
Все данные видны! Вы принимаете код от пользователя и запускаете его в своей базе данных. Теперь, если я решил удалить все ваши таблицы базы данных?
Это просто покрывает первый пункт, который я сделал. Пожалуйста, верьте, что для ваших пользователей существуют большие проблемы, если вы еще не сделали шаг 2, наименьшее из которых - сотни их учетных записей на других сайтах (например, Gmail, пример банка), которые стали известны киберпреступникам.
Взгляните на эту комикс:
Кроме того, в библиотеке запросов URL-адресов есть ошибка обработки юникода, и мы сохраняем пароли несолеными... поэтому, если мы соединим их с emoji, мы можем закрыть сразу три вопроса!
Это делается более забавным, но проблема, описанная в этой комической, вероятно, менее плоха, чем проблема, с которой вы сталкиваетесь. Пожалуйста, ради того, кто доверил вам свои данные, отключите его на несколько дней, пока вы пытаетесь сделать что-то похожее на безопасное.
Возможно, вы захотите привлечь технического консультанта; если ваши разработчики не имеют опыта создания защищенного от вторжений программного обеспечения, то они, вероятно, не справляются с задачей обеспечения безопасности без защиты (что на порядок больше, особенно если вы новичок в таких вещах).
"1;CREATE TABLE you_have_lost (number int);"
не будет работать на клиентах MySQL от PHP, потому что они не поддерживают отдельные операторы SQL, разделенные точкой с запятой ( ;
) ... вместо этого вы просто получаете сообщение об ошибке, не выполняя запросы и не создавая таблицу .... если только вы не используете mysqli_multi_qeury () тогда ваш SQL инъекция будет работать ..