Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 51 из 52 · 9 мин
Как Вредный Скрипт пытается украсть базу и почему параметры его останавливают.
Ввожу в поиск по почте: ' OR '1'='1. Опа, все покупатели с телефонами! Спасибо за склейку строк.
Код сайта склеил мой запрос из кусков текста: WHERE email = ' + ввод + '. Ввод стал частью SQL, а не значением.
Никогда не склеивай SQL с вводом пользователя. Только параметры.
OR '1'='1' пропускает все строки, ; DROP TABLE удаляет таблицу.-- Так собрал запрос уязвимый код сайта:
SELECT name, phone FROM customers
WHERE email = '' OR '1'='1';$1, $2, а значения — отдельно. База никогда не разбирает значение как SQL.query('… WHERE email = $1', [email]).SELECT name FROM customers WHERE email = $1;PREPARE · EXECUTEPREPARE имя(типы) AS запрос с $1 — сохранить запрос с параметрами, EXECUTE имя(значения) — выполнить.PREPARE find_guest(text) AS
SELECT name, city FROM customers WHERE email = $1;
EXECUTE find_guest(''' OR ''1''=''1');GRANT · REVOKEGRANT SELECT ON products TO site; — выдать роли право читать таблицу, REVOKE — забрать.CREATE ROLE site LOGIN;
GRANT SELECT ON products, categories TO site;
REVOKE ALL ON customers FROM site;Ввод пользователя — только параметром. У приложения — минимум прав, который ему нужен.
Подготовь запрос find_guest с параметром типа text, который ищет name и city покупателя по email = $1. Затем выполни его для 'anna@mail.ru'.
PREPARE — пока нет$1 — пока нетEXECUTE — пока нетcategories — категории товаровid, nameproducts — товарыid, name, category_id, price, weight_g, is_available, added_oncustomers — покупателиid, name, email, city, phone, birthday, registered_onstaff — сотрудникиid, name, role, salary, hired_on, manager_idorders — заказыid, customer_id, staff_id, created_at, statusorder_items — позиции заказовorder_id, product_id, quantity, unit_pricereviews — отзывыid, customer_id, product_id, rating, comment, created_onВыберите один ответ.
Как надёжно защититься от SQL-инъекций?
Выберите один ответ.
Какие права дать сайту, который только показывает каталог?
Проверяем состояние обучения…