igortik
Новичок
SQL Injection - вопрос безопасности
Во-первых, начну с того, что досконально ознакомился с экранированием и сопутствующими статьями.
Все мои запросы в базу выглядят примерно так: SELECT * FROM `table` WHERE page='$page';
Чтобы защитить $page я использовал следующий механизм:
Вопрос по этой части:
Теоретически это должно полностью исключить возможность задать неестественное значение переменной $page.
- Достаточно ли для полной защиты от инъекции чере запрос SELECT * FROM `table` WHERE page='$page'; использовать:
или все же надо использовать условие с массивом, описанное выше?
Значения ID , которые посылаются скрипту из браузера обрабатываются так:
- Насколько эффективен такой метод?
Что касается попытки поменять значение переменной ID еще поставил такую защиту:
Что касается форм, которые отправляют в базу информацию посетителя:
Перед тем, как выполнить запрос: INSERT INTO `table` (text) VALUES ('$text'); я обрабатываю переменную $text таким образом:
Есть ли у Вас какие-то замечания и практические советы по защите БД?
P.S. Знаю, что тема ни раз поднималась, но хотелось бы еще раз освежить в памяти все моменты.
Во-первых, начну с того, что досконально ознакомился с экранированием и сопутствующими статьями.
Все мои запросы в базу выглядят примерно так: SELECT * FROM `table` WHERE page='$page';
Чтобы защитить $page я использовал следующий механизм:
PHP:
$pages = array("значение 1","значение 2"); // и т.д.
$key=array_search($_GET['page'],$pages);
$result=$pages[$key];
if($page != $result) {die($message);}
Теоретически это должно полностью исключить возможность задать неестественное значение переменной $page.
- Достаточно ли для полной защиты от инъекции чере запрос SELECT * FROM `table` WHERE page='$page'; использовать:
PHP:
if (!$_GET['page']) {$page="main";} else {$page.= mysql_real_escape_string($_GET['page']);}
Значения ID , которые посылаются скрипту из браузера обрабатываются так:
PHP:
$id = $_GET['id'];
$id = (int)$id;
Что касается попытки поменять значение переменной ID еще поставил такую защиту:
PHP:
if (is_numeric($_GET['id']) or $_GET['id'] == "") {} else {die($message);}
Перед тем, как выполнить запрос: INSERT INTO `table` (text) VALUES ('$text'); я обрабатываю переменную $text таким образом:
PHP:
if (strlen($text) <= 1000)
{
$text = mysql_real_escape_string($text);
mysql_query("INSERT INTO `table` (text) VALUES ('$text')");
}
P.S. Знаю, что тема ни раз поднималась, но хотелось бы еще раз освежить в памяти все моменты.