Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> начальные знания по защите от SQL-инъекций 
:(
    Опции темы
ReactOS
Дата 28.3.2008, 05:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.12.2007

Репутация: нет
Всего: 33



Предположим, что интерфейс пользователя позволяет некий id записи, которую надо удалить из таблицы, соответствующий SQL-запрос будет
Код

DELETE FROM 'table' WHERE 'id'=12

Если пользователь в строчу с delete.php
Код

//12 OR 1=1

DELETE FROM 'table' WHERE 'id'=12 OR 1=1

Допишет в delete.php?id=12 OR 1=1
то, такой запрос уже удалит все записи из таблицы.

Прочитал, что для защиты от инъекций, надо использовать ф-цию is_int(), и если она возваращает значение true, то id == целое число.
Конечно, врял ли какой-нибудь разработчик будет использовать поле для ввода id удаляемой записи. Обычно для удаление используется, соответствующая гиперссылка. Но это нужно для изучения.

Помогите с создания простейшей защиты, мне будет полезно для обучения smile

p.s.
Прошу еще рассказать, если возможно, как сделать защиту, когда определенной страницы не сущетсвует, и пользователь начинает вводить id=12313112313 or id=-1'A

спасибо!

Это сообщение отредактировал(а) Nedriaous - 28.3.2008, 05:21
PM   Вверх
Canarat
Дата 28.3.2008, 07:12 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 11.3.2008
Где: Каспий

Репутация: 5
Всего: 5



Nedriaous
Код

$sql="DELETE FROM 'table' WHERE 'id'=".((int) $_REQUEST['id']);

И будет тебе счастье. аналогично и со вторым вопросом.
PM MAIL   Вверх
Smith
Дата 28.3.2008, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.1.2007

Репутация: 1
Всего: 2



Цитата(Nedriaous @ 28.3.2008,  05:18)
p.s.
Прошу еще рассказать, если возможно, как сделать защиту, когда определенной страницы не сущетсвует, и пользователь начинает вводить id=12313112313 or id=-1'A

спасибо!

Код

$query = mysql_query("SELECT * FROM `table` WHERE `id`='".((int) $_GET['id'])."'");
if (mysql_num_rows($query)>0) {
  mysql_query("DELETE FROM `table` WHERE `id`='".((int) $_GET['id'])."'");
} else
  echo 'Такой фигни не существует.';


Это сообщение отредактировал(а) Smith - 28.3.2008, 07:47
PM MAIL   Вверх
Feldmarschall
Дата 28.3.2008, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Nedriaous, поясни пожалуйста, что ты имел в виду во втором вопросе. Какая разница, существует страница, и что такого во вводимой пользователем строке?

Цитата(Nedriaous @  28.3.2008,  05:18 Найти цитируемый пост)
Прочитал, что для защиты от инъекций, надо использовать ф-цию is_int(), 

а там, где ты это прочитал, не написано, что делать, если передаваемый параметр - не число, а строка? Проверчть is_str()?

Цитата(Nedriaous @  28.3.2008,  05:18 Найти цитируемый пост)
Конечно, врял ли какой-нибудь разработчик будет использовать поле для ввода id удаляемой записи. .

А что - написать что-то можно только в поле ввода, а в гиперссылку - нельзя?

Цитата(Nedriaous @  28.3.2008,  05:18 Найти цитируемый пост)
для удаление используется, соответствующая гиперссылка.

Это ошибка. Для удаления, и вообще для любых изменений в БД, должна использоваться только форма и только с методом POST!
PM   Вверх
ReactOS
Дата 28.3.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.12.2007

Репутация: нет
Всего: 33



Цитата

Nedriaous, поясни пожалуйста, что ты имел в виду во втором вопросе. Какая разница, существует страница, и что такого во вводимой пользователем строке?

Какая разница, существует страница - разности нет, есть разность в другом. Пользователь ничего смертельного не сделает, скорее это больше для себя, чтобы на id=12313112313 or id=-1'A - а разность, как раз заключается в том, чтобы не выдавилсь ошибки из БД, а выводилось сообщение "Нет такой страницы", ну или если введет пользователь строке не существующий id, то редирект на id=1, вот и все проблема.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0645 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.