Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2012, 20:57   #1
622089
Пользователь
 
Регистрация: 26.02.2012
Сообщений: 19
По умолчанию вопрос по защите переменных

смотрите у меня страница вида view_cat.php?id=1&page=2, но я нашел скрипт защиты от sql инъекции и добавил его, но после установки скрипта постраничной навигации мне нужно еще защитить переменную page.
Вот код скрипта защиты
Код:
if (!preg_match("|^[\d]+$|", $cat)) {
exit (header("Location: 404")); }
. Вопрос: куда надо вставить этот же код для защиты переменной page? вот код страницы:
Код:

<? include ("blocks/bd.php");
if (isset($_GET['cat'])) {$cat = $_GET['cat']; }
if (!isset($cat)) {header("Location: 404");}

/* Проверяем, является ли переменная числом */
if (!preg_match("|^[\d]+$|", $cat)) {
exit (header("Location: 404")); }



$result = mysql_query("SELECT * FROM categories WHERE id='$cat'",$db);

if (!$result)
{
exit (header("HTTP/1.0 404 Not Found"));
}

if (mysql_num_rows($result) > 0)

{
$myrow = mysql_fetch_array($result); 



}

else
{
echo "<p>В данной категории пока нет записей.</p>";
}


$result_setting = mysql_query("SELECT title,meta_d,meta_k,text FROM settings WHERE page='view_cat'", $db);
$myrow_setting = mysql_fetch_array($result_setting);
?>

<?
$result77 = mysql_query("SELECT str FROM options", $db);
$myrow77 = mysql_fetch_array($result77);
$num = $myrow77["str"];
// Извлекаем из URL текущую страницу
@$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM articles WHERE cat='$cat'");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
// Определяем начало сообщений для текущей страницы
$page = intval($page);

// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная с какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start		
		
$result = mysql_query("SELECT id,title,description,author,date,view FROM articles WHERE cat='$cat' ORDER BY date LIMIT $start, $num",$db);
?>
							<p><?

if (!$result)
{
header("HTTP/1.0 404 Not Found"); ;
}

if (mysql_num_rows($result) > 0)

{
$myrow = mysql_fetch_array($result); 

do {
        
printf ("<table align='center' class='article'>
         
		 <tr>
         <td class='article_title'><p class='article_name'><a href='view-%s'>%s</a></p>
		 <p class='article_adds'>Дата добавления: %s</p>
		 <p class='article_adds'>Автор: %s</p>
		 <p class='view_adds'>Просмотров: %s</p>
		 </td>
         </tr>
         
		 <tr>
         <td>%s</td>
         </tr>
         
		 </table><br><br>", $myrow["id"], $myrow["title"], $myrow["date"], $myrow["author"], $myrow["view"], $myrow["description"]); 
		  		  
}

while ($myrow = mysql_fetch_array ($result));


// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href=cat-'.$cat.'-1>Первая</a> | <a href=cat-'.$cat.'-'. ($page - 1) .'>Предыдущая</a> | ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' | <a href=cat-'.$cat.'-'. ($page + 1) .'>Следующая</a> | <a href=cat-'.$cat.'-' .$total. '>Последняя</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) $page5left = ' <a href=cat-'.$cat.'-'. ($page - 5) .'>'. ($page - 5) .'</a> | ';
if($page - 4 > 0) $page4left = ' <a href=cat-'.$cat.'-'. ($page - 4) .'>'. ($page - 4) .'</a> | ';
if($page - 3 > 0) $page3left = ' <a href=cat-'.$cat.'-'. ($page - 3) .'>'. ($page - 3) .'</a> | ';
if($page - 2 > 0) $page2left = ' <a href=cat-'.$cat.'-'. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href=cat-'.$cat.'-'. ($page - 1) .'>'. ($page - 1) .'</a> | ';

if($page + 5 <= $total) $page5right = ' | <a href=cat-'.$cat.'-'. ($page + 5) .'>'. ($page + 5) .'</a>';
if($page + 4 <= $total) $page4right = ' | <a href=cat-'.$cat.'-'. ($page + 4) .'>'. ($page + 4) .'</a>';
if($page + 3 <= $total) $page3right = ' | <a href=cat-'.$cat.'-'. ($page + 3) .'>'. ($page + 3) .'</a>';
if($page + 2 <= $total) $page2right = ' | <a href=cat-'.$cat.'-'. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href=cat-'.$cat.'-'. ($page + 1) .'>'. ($page + 1) .'</a>';

// Вывод меню если страниц больше одной

if ($total > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pstrnav\">";
echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo "</div>";
}

}
else {echo"<p>Объектов не найдено</p>";}
?>
Буду признателен
622089 вне форума Ответить с цитированием
Старый 02.03.2012, 22:44   #2
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Мда ... порадовали .... такой защиты от sql инъекций я еще не видел )))
Код:
if (!preg_match("|^[\d]+$|", $cat)) {
exit (header("Location: 404")); }
В учебниках так-то пишут по-другому
Код:
$result = mysql_query("SELECT * FROM categories WHERE id='".mysql_real_escape_string($cat)."'",$db);
Хотя в вашем случае помог бы и просто intval($cat); intval($page);
Его даже можно проверить
Код:
if (intval($page) == trim ($page) )
.....
Cronos20 вне форума Ответить с цитированием
Старый 02.03.2012, 23:31   #3
622089
Пользователь
 
Регистрация: 26.02.2012
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Cronos20 Посмотреть сообщение
Мда ... порадовали .... такой защиты от sql инъекций я еще не видел )))
Код:
if (!preg_match("|^[\d]+$|", $cat)) {
exit (header("Location: 404")); }
В учебниках так-то пишут по-другому
Код:
$result = mysql_query("SELECT * FROM categories WHERE id='".mysql_real_escape_string($cat)."'",$db);
Хотя в вашем случае помог бы и просто intval($cat); intval($page);
Его даже можно проверить
Код:
if (intval($page) == trim ($page) )
.....
увы но мне этот метод не подходит можете еще что-то предложить?
622089 вне форума Ответить с цитированием
Старый 02.03.2012, 23:33   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от 622089 Посмотреть сообщение
увы но мне этот метод не подходит можете еще что-то предложить?
Можете уточнить, по какой причине вам не подходит mysql_real_escape_string() ..?
Andkorol вне форума Ответить с цитированием
Старый 02.03.2012, 23:40   #5
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Можете уточнить, по какой причине вам не подходит mysql_real_escape_string() ..?
Я тоже не понимаю по какой причине это не подходит
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по защите от sql 622089 PHP 2 02.03.2012 17:55
Немного о защите kettanaito Свободное общение 3 03.09.2011 18:22
Вопрос по преобразованию типов переменных (TImage и FILE) Pcrepair Общие вопросы Delphi 3 04.01.2011 15:15
по защите приложения Assemblerru Общие вопросы C/C++ 4 05.04.2010 21:59
Добрый день и снова вопрос по защите) Wasily Microsoft Office Excel 17 18.06.2008 10:26