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

Форум PHP

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

 

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

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

тема: Похоже на дырку как бороться
 
 автор: ChieFSS   (09.11.2006 в 15:27)   письмо автору
 
 

У меня на сайте адрес должен выглядень так: www.site_name.ru?p=1
где p - это название страницы. по ней сайт определяет какую ссылку подсветить, какой текст показать, какую картинку и т.д.

Я попробовал в значение P поставить какой-нибудь такой номер 45145876
Естественно такого номера в БД нет и сайт ничего не отображает.. можно ли поставить проверку на наличие такого номера в БД ? Вот если надо запрос выглядет так: $href=mysql_query("select * from links order by name;");

Потом попробовал сделать так: www.site_name.ru?p='
Выдаёт ошибку.. на сколько я знаю это дырка и через неё можно пробраться в БД.
Как можно это предотвратить?

И ещё эта P передаётся методом GET соответственно сайт проверяет значение P через $_GET['p']
А как можно такое сделать через POST ?

Кстати эта P сохраняется в БД как id (auto_inrcement и primary key)

   
 
 автор: ЯR   (09.11.2006 в 15:49)   письмо автору
 
   для: ChieFSS   (09.11.2006 в 15:27)
 

> можно ли поставить проверку на наличие такого номера в БД ?
Можно проверять так:

<?php
if(mysql_num_rows($query) > 0){
   
// Значит такая запись существует
}else{
   
// Не существует
}
?>

   
 
 автор: Loki   (10.11.2006 в 13:30)   письмо автору
 
   для: ЯR   (09.11.2006 в 15:49)
 

Ваша проверка при простейшей инъекции сдаст базу с потрохами:)

   
 
 автор: kasmanaft   (09.11.2006 в 16:00)   письмо автору
 
   для: ChieFSS   (09.11.2006 в 15:27)
 

Чтобы избавиться от всякой бяки из гет запроса, можно привести значение "p" к численному типу

$p = (int)$_GET['p'];

>можно ли поставить проверку на наличие такого номера в БД ? Вот если надо запрос выглядет так:
>$href=mysql_query("select * from links order by name;");
Этот запрос выбирает из базы все записи ... так и надо или нужно взять конкретную, под номером "p" ?
Если так, то запрос будет выглядеть примерно так:

$href=mysql_query("SELECT * FROM links WHERE id='$p'");

Затем можно проверить количество полученных строк, если ничего не получили, значит такой записи в таблице нет:

if (mysql_num_rows($href) > 0)
{  
   * * * * запись есть, выводим * * * *
}
else
{
   echo "В базе данных нет запрошенной записи";
}

   
 
 автор: ChieFSS   (09.11.2006 в 16:20)   письмо автору
 
   для: kasmanaft   (09.11.2006 в 16:00)
 


$p = (int)$_GET['p']; 

А если поле БД имеет значение int или это не связано с полем БД ?


>Этот запрос выбирает из базы все записи ... так и надо или нужно взять конкретную, под номером "p" ?
изменил.. пока работает.. :)


А что означает 0 в этой записи?

if (mysql_num_rows($href) > 0) 


Потому что у меня значение 0 означает вывод на экран главной страницы так же как и если P вообще не определена, но 0 в таблицы нет и не может быть т.к. поле not null и если создаётся поле с 0 значением, то оно создаётся с максимальным, который есть +1

   
 
 автор: ЯR   (09.11.2006 в 16:25)   письмо автору
 
   для: ChieFSS   (09.11.2006 в 16:20)
 

mysql_num_rows возвращает кол-во записей, выбраных при данном запросе, если их больше нуля, значит такая запись есть

> А если поле БД имеет значение int или это не связано с полем БД ?
не связано, в данном случае переменной $p присваивается целочисленное значение (integer)

   
 
 автор: ChieFSS   (09.11.2006 в 16:31)   письмо автору
 
   для: ChieFSS   (09.11.2006 в 15:27)
 

Всё заработало.. всем спасибо

А можно сделать так чтобы эта переменная передавалась не через get, а post ?

   
 
 автор: cheops   (09.11.2006 в 23:30)   письмо автору
 
   для: ChieFSS   (09.11.2006 в 16:31)
 

>А можно сделать так чтобы эта переменная передавалась не через get, а post ?
Можно через сокеты передавать, но это не удобно. Кроме того, на такую страницу нельзя будет сослаться с другой страницы и они не будет индексироваться роботами поисковых систем, а злоумышленику всё равно, что подделывать GET- или POST-данные, т.е. в плане защиты это не даёт никакого преимущества.

   
 
 автор: ChieFSS   (10.11.2006 в 00:18)   письмо автору
 
   для: cheops   (09.11.2006 в 23:30)
 

Ясно.. я просто думал что так оно будет меньше заметно :)

А можно где-нибудь в интернете почитать статьи о защите сайта и о возможных недочётах у начинающих?

   
 
 автор: cheops   (10.11.2006 в 02:40)   письмо автору
 
   для: ChieFSS   (10.11.2006 в 00:18)
 

Возможно вас заинтересует статья по ссылке http://www.softtime.ru/info/articlephp.php?id_article=35.

   
Rambler's Top100
вверх

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