| |
|
|
| | Здравствуйте! У меня такая проблема: кто-то защел на сайт и в рубрике объявлений разместил свое объявления, где вместо текста были написаны соответствующие названия полей в БД сайта, Вопрос как он смог узнать?, второе у меня на каждой странице стоит счетчик, в том числе и на странице ввода информации, так вот, когда я вошел на страницу статистики bigmir.net Там осутствовала информация про то, что кто-то заходил на страницу ввода информации.Как тут защититься? | |
| |
|
|
| |
|
|
| |
для: ronin
(02.01.2007 в 13:10)
| | | Может быть была SQL инъекция. | |
| |
|
|
| |
|
|
| |
для: ronin
(02.01.2007 в 13:10)
| | | Без аудита кода сложно что-то сказать... | |
| |
|
|
| |
|
|
| |
для: 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 'Âè íå âåëè ³íôîðìàö³þ.<br />'
.'Ñïðîáóéòå ùå ðàç.';
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 'Âèáà÷òå! Àëå ó Âàñ âæå º îãîëîøåííÿ ó äàí³é ðóáðèö³! . ';
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().' äàí³ âíåñåí³ â áàçó.';
else echo mysql_error();
?> | |
| |
|
|
| |
|
|
| |
для: 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']))));
$tel= mysql_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("Не верный формат запроса");
?>
|
| |
| |
|
|
| |
|
|
| |
для: cheops
(02.01.2007 в 14:34)
| | | Понял, выполняю, вопрос: при выводе эти переменные тоже нужно как-то защитить?
WHERE rub = '".(int)$_GET['rub']."'
|
Спасибо за помощь! | |
| |
|
|
| |
|
|
| |
для: ronin
(02.01.2007 в 15:55)
| | | При выводе ничего в приципе можно не делать, лишь пропустить их через htmlspecialchars(), если переменные вводили пользователи, если они автоматически сгенерированы или набраны администратором, можно обойтись и без htmlspecialchars(). | |
| |
|
|
| |
|
|
| |
для: cheops
(02.01.2007 в 16:03)
| | | Понял! Спасибо! | |
| |
|
|