Введение в практическую безопасность (2019)/Задания по вебу/Бонус по SQL

Материал из SecSem Wiki
Перейти к навигации Перейти к поиску

Баллы

За задание дается 250 баллов (сверх тех 1000 баллов, которые будут даваться за основные задания).

Формулировка

Вам нужно написать маленькое веб-приложение, в котором для хранения данных будет использоваться SQL-база данных.

В базе данных должно быть две таблицы, хранящие данные о пользователях приложения. Первая таблица должна называться "users" и иметь следующие колонки:

  • id пользовтеля (число) - должно быть уникальным для каждого пользователя
  • login - имя пользователя (строка)
  • money_amount (число)
  • card_number - (строка) номер его кредитной карты (кстати, правдоподобные номера карт можно брать на http://www.getcreditcardnumbers.com/)
  • status - статус активен/неактивен (любой тип данных по выбору, главное, чтобы было два различимых значения).

Вторая таблица должна хранить пароли пользователей, в ней должно быть две колонки: id пользователя и собственно пароль. Имя этой второй таблицы может быть произвольным.

Вместе с кодом приложения должен поставляться скрипт "init-db.sql", который инициализирует эти таблицы, т. е. создает их (CREATE TABLE) и заполняет данными (INSERT). Всего должно быть не меньше 5 пользователей, минимум 3 активных, соответственно, минимум 2 неактивных. У первого активного пользователя должно быть имя "admin". У каждого пользователя в таблице с паролями должен лежать пароль.

  • Веб-приложение должно по url "/users" отдавать страницу со списком АКТИВНЫХ пользователей, на каждой строке списка должен быть id, имя пользователя. Оформить список можно как bullet list или таблицу или как хотите, главное, чтобы данные пользователей были на разных строках и чтобы смотреть было не больно. Данные для списка должны получаться SQL-запросом из базы (SELECT), а не быть вписанными в код вручную, то есть, если добавить в базу еще одного активного пользовалеля, он должен появиться при следующем заходе на страницу в списке. Определять активный пользователь или нет должен SQL-запрос по значению поля "status".
  • Должна быть выборка пользователей по login и id, данные в ней должны быть такие же как в выборке всех пользователtй по "/users". Параметр, по которому должен отбираться пользователь, передается в параметре query string. То есть:
    • по url "/by-login?login=admin" должна выдаваться страница с данными пользователя c именем "admin". Ну и если не "admin" а другое имя, то инфа о пользователе с таким именем, а если такого пользователя не существует, то пусть что угодно происходит (хоть ошибка, хоть пустая страница)
    • по url "/by-id?id=3" должны выдаваться данные пользователя с id=3 и т.д. .

На главной странице приложения может быть что угодно, главное, чтобы там была ссылка на "/users", а также либо формы, где можно указать login и id (чтобы потом сделать соответствующий запрос), либо просто ссылки - примеры (например ссылки на url "/by-login?login=admin" и "/by-id?id=3").

База данных может быть любой. Язык программирования/фреймворк/веб-сервер тоже любой. Если совсем не знаете на каком языке писать, возьмите тот на котором написать будет легче/быстрее, например, PHP или Python.

Критерии

Update: дедлаин был продлён на час.

Чтобы засчитать задание, вы должны прислать код своего мини-приложения (архивом или ссылкой на код) в телеграм @asterite3 или на мою почту: asterite@seclab.cs.msu.su. К коду должен прилагаться README, где есть список всех зависимостей (всего, что ваш код использует) и есть инструкция по установке/запуску. Кроме того, обязательно должен присутствовать файл "init-db.sql". Я должен смочь запустить ваше приложение, и оно должно правильно работать (отдавать список пользователей из базы), иначе задание не будет засчитано. Крайний срок приема задания - 23.59 18 февраля. Поскольку с первого раза что-нибудь обязательно не заработает, лучше присылайте пораньше, я напишу если возникнут проблемы чтобы можно было исправить. Автором присланного кода должны быть вы сами, запрещается присылать приложение, сделанное кем-то еще. В своем сообщении или теме письма не забудьте указать по какому поводу пишете (например "Задание по SQL по курсу Безопасность компьютерных систем" и ФИО).

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