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

Форум MySQL

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

 

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

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

тема: защита сайта
 
 автор: ronin   (02.01.2007 в 13:10)   письмо автору
 
 

Здравствуйте! У меня такая проблема: кто-то защел на сайт и в рубрике объявлений разместил свое объявления, где вместо текста были написаны соответствующие названия полей в БД сайта, Вопрос как он смог узнать?, второе у меня на каждой странице стоит счетчик, в том числе и на странице ввода информации, так вот, когда я вошел на страницу статистики bigmir.net Там осутствовала информация про то, что кто-то заходил на страницу ввода информации.Как тут защититься?

   
 
 автор: ddhvvn   (02.01.2007 в 13:13)   письмо автору
 
   для: ronin   (02.01.2007 в 13:10)
 

Может быть была SQL инъекция.

   
 
 автор: cheops   (02.01.2007 в 13:25)   письмо автору
 
   для: ronin   (02.01.2007 в 13:10)
 

Без аудита кода сложно что-то сказать...

   
 
 автор: ronin   (02.01.2007 в 13:41)   письмо автору
 
   для: cheops   (02.01.2007 в 13:25)
 

<?php
// create short variable names
$name=$_POST['name'];
$param=$_POST['param'];
$tel=$_POST['tel'];
$rub=$_POST['rub'];




if ( !$rub || !$name || !$tel )
{
echo '&#194;&#232; &#237;&#229; &#226;&#229;&#235;&#232; &#179;&#237;&#244;&#238;&#240;&#236;&#224;&#246;&#179;&#254;.<br />'
.'&#209;&#239;&#240;&#238;&#225;&#243;&#233;&#242;&#229; &#249;&#229; &#240;&#224;&#231;.';
exit;
}

$name = addslashes($name);
$param = addslashes($param);
$fel = addslashes($fel);
$name = mysql_escape_string (htmlspecialchars (stripslashes (trim ($_POST['name']))));
$param = mysql_escape_string (htmlspecialchars (stripslashes (trim ($_POST['param']))));
$tel= mysql_escape_string (htmlspecialchars (stripslashes (trim ($_POST['tel']))));

@ $db = mysql_pconnect('host', 'login', 'parol');

if (!$db)
{
echo 'Error: Could not connect to database. Please try again later.';
exit;
}

mysql_select_db('base);
$query="DELETE FROM table WHERE datum<NOW() - INTERVAL 28 DAY";
$result = mysql_query($query);
$query="SELECT COUNT(*) FROM bable WHERE tel = '".$_POST['fel']."' AND rub = '".$_POST['rub']."'";
$result = mysql_query($query);
$total = mysql_result($result,0);
if ($total)

{
echo '&#194;&#232;&#225;&#224;&#247;&#242;&#229;! &#192;&#235;&#229; &#243; &#194;&#224;&#241; &#226;&#230;&#229; &#186; &#238;&#227;&#238;&#235;&#238;&#248;&#229;&#237;&#237;&#255; &#243; &#228;&#224;&#237;&#179;&#233; &#240;&#243;&#225;&#240;&#232;&#246;&#179;! . ';
exit;
}

$query = "insert into table ( name,param,tel,datum, rub ) values
('".$name."', '".$param."', '".$tel."',NOW(), '".$rub."' )";

$result = mysql_query($query);
if ($result)
echo mysql_affected_rows().' &#228;&#224;&#237;&#179; &#226;&#237;&#229;&#241;&#229;&#237;&#179; &#226; &#225;&#224;&#231;&#243;.';
else echo mysql_error();
?>

   
 
 автор: cheops   (02.01.2007 в 14:34)   письмо автору
 
   для: ronin   (02.01.2007 в 13:41)
 

Конструкцию
<?php
$name 
addslashes($name);
$param addslashes($param);
$fel addslashes($fel);
$name mysql_escape_string (htmlspecialchars (stripslashes (trim ($_POST['name']))));
$param mysql_escape_string (htmlspecialchars (stripslashes (trim ($_POST['param']))));
$telmysql_escape_string (htmlspecialchars (stripslashes (trim ($_POST['tel']))));
?>

Замените на
<?php
  
if (!get_magic_quotes_gpc())
  {
    
$name mysql_escape_string($_POST['name']);
    
$param =  mysql_escape_string($_POST['param']);
    
$tel =  mysql_escape_string($_POST['tel']);
  }
?>

$_POST['fel'] и $_POST['rub'] - это целые числа? Тогда добавьте ещё проверку
<?
  
if(!preg_match("|^[\d]+$|",$_POST['fel'])) exit("Не верный формат запроса");
  if(!
preg_match("|^[\d]+$|",$_POST['rub'])) exit("Не верный формат запроса");
?>

   
 
 автор: ronin   (02.01.2007 в 15:55)   письмо автору
 
   для: cheops   (02.01.2007 в 14:34)
 

Понял, выполняю, вопрос: при выводе эти переменные тоже нужно как-то защитить?

WHERE  rub = '".(int)$_GET['rub']."'

Спасибо за помощь!

   
 
 автор: cheops   (02.01.2007 в 16:03)   письмо автору
 
   для: ronin   (02.01.2007 в 15:55)
 

При выводе ничего в приципе можно не делать, лишь пропустить их через htmlspecialchars(), если переменные вводили пользователи, если они автоматически сгенерированы или набраны администратором, можно обойтись и без htmlspecialchars().

   
 
 автор: ronin   (02.01.2007 в 16:04)   письмо автору
 
   для: cheops   (02.01.2007 в 16:03)
 

Понял! Спасибо!

   
Rambler's Top100
вверх

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