Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Безопасен ли данный запрос от SQL-инъекции?
 
 автор: kis-kis   (16.01.2008 в 10:24)   письмо автору
 
 

Безопасен ли данный запрос от SQL-инъекции?
Заранее спасибо.


<?php
if ($_POST)
{
$user_age intval($age);

if (!
get_magic_quotes_gpc()) 

$userjob mysql_escape_string($job); 

$query "INSERT INTO job (uage, ujob) VALUES ('$user_age', '$userjob')";
$req mysql_query($query) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
}
?>

<form name="form1" method="post" action="">
<table width="100%">
<tr>
<td>Возраст:</td>
<td>
<input type="text" name="age" size="2" maxlength="2">
</td>
</tr>
<tr>
<td>Должность:</td>
<td>
<input type="text" name="job">
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input type="submit" name="Submit" value="Добавить">
</td>
</tr>
</table>
</form>

   
 
 автор: bronenos   (16.01.2008 в 10:58)   письмо автору
 
   для: kis-kis   (16.01.2008 в 10:24)
 

Что такое $age и $job ?
Не вижу их в коде

if (!get_magic_quotes_gpc())  
{  
$userjob = mysql_escape_string($job);  

Если условие не будет выполняться, то то, что надо вставить в запрос, будет находиться в другой переменной

   
 
 автор: kis-kis   (16.01.2008 в 11:01)   письмо автору
 
   для: bronenos   (16.01.2008 в 10:58)
 

$age = $_POST['age'];
$job = $_POST['job'];

>>Если условие не будет выполняться, то то, что надо вставить в запрос, будет находиться в другой переменной

Данные поля обязательны для заполнения.

   
 
 автор: KPETuH   (16.01.2008 в 11:10)   письмо автору
 
   для: kis-kis   (16.01.2008 в 11:01)
 

при чем туту это вам говорят что если условие не выполнится то переменная $userjob не будет иницализирована, а она у вас использается в запросе!

   
 
 автор: kis-kis   (16.01.2008 в 11:22)   письмо автору
 
   для: KPETuH   (16.01.2008 в 11:10)
 

Так тогда? ))


if (!get_magic_quotes_gpc())  
{  
$userjob = mysql_escape_string($job);  
}
else
{
$userjob = $_POST['job'];  
}

   
 
 автор: bronenos   (16.01.2008 в 12:44)   письмо автору
 
   для: kis-kis   (16.01.2008 в 11:22)
 

if (!get_magic_quotes_gpc())   
{   
$job = mysql_escape_string($job);   
}

Или вы боитесь переопределять значение переменных?
Не бойтесь, сначала вычисляется правое, потом подставляется в левое, ничего не переплетается

   
 
 автор: kis-kis   (16.01.2008 в 13:06)   письмо автору
 
   для: bronenos   (16.01.2008 в 12:44)
 

Ок, спасибо! Но так и нет ответа на вопрос - Безопасен ли данный запрос от SQL-инъекции?
А как можно проверить значение - $age на число/не число?

   
 
 автор: bronenos   (16.01.2008 в 13:50)   письмо автору
 
   для: kis-kis   (16.01.2008 в 13:06)
 

Безопасен! Проверка - is_int(), преобразование - intval()

   
 
 автор: kis-kis   (16.01.2008 в 13:59)   письмо автору
 
   для: bronenos   (16.01.2008 в 13:50)
 

Спасибо. ))

   
 
 автор: THERAPYbrother   (16.01.2008 в 14:20)   письмо автору
 
   для: kis-kis   (16.01.2008 в 13:59)
 

У меня тоже вопрос по поводу скул инъекций.
Я все данные введеные пользователем всегда проверяю РВ.
например
^[а-я0-9]$

при обнаружении посторонних символов код дальше не выполняется,следовтельно и подключение
к БД и запросов не происходит.
достаточно ли этого для защиты от скул инъекции?

   
 
 автор: bronenos   (16.01.2008 в 14:22)   письмо автору
 
   для: THERAPYbrother   (16.01.2008 в 14:20)
 

зачем?? экранируйте и все

   
 
 автор: THERAPYbrother   (16.01.2008 в 15:14)   письмо автору
 
   для: bronenos   (16.01.2008 в 14:22)
 

не знаю,
я просто не знаю функций(для экранирования спец символов,с кавычками там еще че то).
Привык РВ юзать,и не запариваюсь/

   
 
 автор: Unkind   (16.01.2008 в 14:25)   письмо автору
 
   для: bronenos   (16.01.2008 в 13:50)
 

> Проверка - is_int()
И Вы туда же. Это не проверка на число/не число, это проверка типа переменной.

   
 
 автор: kis-kis   (16.01.2008 в 14:35)   письмо автору
 
   для: Unkind   (16.01.2008 в 14:25)
 

А как тогда проверить правильно?

   
 
 автор: Unkind   (16.01.2008 в 15:05)   письмо автору
 
   для: kis-kis   (16.01.2008 в 14:35)
 

Функцией ctype_digit() можно проверить является ли каждый символ цифрой.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования