[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита поиска
svkarasev
Всем hi помогите плиз защитить мой скрипт от инъекций и символов и перегрузки. Кучу учебников перевернул но так и ничего не получается....

<?php
//получаем данные через $_POST
if (isset($_POST['search'])) {
// подключаемся к базе
include('php/connect.php');
$db = new db();
// никогда не доверяйте входящим данным! Фильтруйте всё!
$word = mysql_real_escape_string($_POST['search']);
$highlight = str_replace(" ", "|", $good);
// Строим запрос
$sql = "SELECT * FROM planes WHERE name LIKE '%" . $word . "%' ORDER BY dt_create DESC LIMIT 10";
// Получаем результаты
$row = $db->select_list($sql);
if(count($row)) {
$end_result = '';
foreach($row as $r) {
echo '<li class="grid_4"><a href="'. $r['link'].'"><img src="'. $r['mini_img_300x100'].'" alt="'. $r[1].'" width="300" height="100"/></a>';
echo '<h3><a href="'. $r['link'].'">'. $r['name'].'</a></h3>';
echo '<span class="price"><strong>'. $r['dt_create'].'</strong> </span>';
echo '<p align="justify">'. $r['decription'].'</p>';
echo '<div><span><a href="#">Оф. сайт</a></span>';
echo '<span class="stars"></span>';
echo '<span><a href="'. $r['link'].'">Подробнее..</a></span></div></li>';

}
echo $end_result;
} else {
echo '<h2 style="padding-bottom: 150px;">По вашему запросу ничего не найдено</h2>';
}
}

?>


файл connect

<?php
class
db {

function __construct()
{
global $dbh;
if (!is_null($dbh)) return;
$dbh = mysql_pconnect('zzzzzz', 'zzzzz', 'zzzzzzz');
mysql_select_db('airblog_info');
mysql_query('SET NAMES utf8');
$tb= 'planes';
}

function select_list($query)
{
$q = mysql_query($query);
if (!$q) return null;
$ret = array();
while ($row = mysql_fetch_array($q, MYSQL_ASSOC)) {
array_push($ret, $row);
}
mysql_free_result($q);
return $ret;
}
}

?>


Заранее всем огромное спасибо...=)



Спустя 4 минуты, 52 секунды (22.11.2011 - 20:46) Guest написал(а):
От XSS защищайся

htmlspecialchars();
stripslashes();
trim();


от инъекций защищайся mysql_real_escape_string

Что-бы посмотреть , как эти функции работают используй гугл.

Спустя 1 минута, 15 секунд (22.11.2011 - 20:47) zuk987 написал(а):
Цитата (Guest @ 22.11.2011 - 17:46)
От XSS защищайся

htmlspecialchars();
stripslashes();
trim();


от инъекций защищайся mysql_real_escape_string

Что-бы посмотреть , как эти функции работают используй гугл.

<offtop>Упс забыл залогиниться</offtop>

Спустя 9 минут, 3 секунды (22.11.2011 - 20:56) svkarasev написал(а):
Да и еще пытаюсь вставить

$page = preg_match('/'.('[0-9]{1,4}').'/', $_POST['search'], $match);
$page = $match[0];
if (!page) {echo 'Ошибка: запрашиваемый номер страницы не опредлен!'; exit()}
//получаем $word, предваритально декодировав его из гет-переменной search в русский язык
$word = str_replace("'","",htmlspecialchars(stripslashes(urldecode($_POST['search']))));
$word = mysql_real_escape_string($_POST['search']);
$highlight = str_replace(" ", "|", $good);

Но пишет ошибку

Parse error: syntax error, unexpected '}' in /home/airblog/public_html/php/search_result.php on line 9

тут 3

Спустя 9 минут, 41 секунда (22.11.2011 - 21:06) Michael написал(а):
У нас на форуме для новичком подготовлена похожая задача. Посмотри.
Вкратце у тебя не вижу
- обраб. магич. кавычек.
- экранирование спец символов % и _ в LIKE
- что в базе у тебя лежит не знаю. Это относится к htmlspecialchars
- непонятно что у тебя в $r[1] если ты юзаешь mysql_fetch_array($q, MYSQL_ASSOC)
- if (!$page)
-
$word = str_replace("'","",htmlspecialchars(stripslashes(urldecode($_POST['search']))));
$word = mysql_real_escape_string($_POST['search']);

Ерунда, ты данные искажаешь htmlspecialchars-ом

Спустя 3 минуты, 54 секунды (22.11.2011 - 21:10) svkarasev написал(а):
Цитата (Michael @ 22.11.2011 - 18:06)

- if (!$page)

я и так писал....без изменения

Спустя 10 минут, 4 секунды (22.11.2011 - 21:20) svkarasev написал(а):
так правильно?

  include('php/connect.php');
$db = new db();
if ( get_magic_quotes_gpc() ) {
$search= stripslashes($search)
}
$page = preg_match('/'.('[0-9]{1,4}').'/', $_POST['search'], $match);
$page = $match[0];

Спустя 11 минут, 34 секунды (22.11.2011 - 21:31) svkarasev написал(а):
<?php
//получаем данные через $_POST
$post =$_POST['search'];
if (!get_magic_quotes_gpc())
{
$post = addslashes($post);
}
if (isset($post)) {
// подключаемся к базе
include('php/connect.php');
$db = new db();
$page = preg_match('/'.('[0-9]{1,4}').'/', $post, $match);
$page = $match[0];
if (!$page) {echo 'Ошибка: запрашиваемый номер страницы не опредлен!'; exit()}
//получаем $word, предваритально декодировав его из гет-переменной search в русский язык
$word = str_replace("'","",htmlspecialchars(stripslashes(urldecode($post))));
$word = mysql_real_escape_string($post);
$highlight = str_replace(" ", "|", $good);
// Строим запрос
$sql = "SELECT * FROM planes WHERE name LIKE '%" . $word . "%' ORDER BY dt_create DESC LIMIT 10";
// Получаем результаты
$row = $db->select_list($sql);
if(count($row)) {
$end_result = '';
foreach($row as $r) {
echo '<li class="grid_4"><a href="'. $r['link'].'"><img src="'. $r['mini_img_300x100'].'" alt="'. $r['name'].'" width="300" height="100"/></a>';
echo '<h3><a href="'. $r['link'].'">'. $r['name'].'</a></h3>';
echo '<span class="price"><strong>'. $r['dt_create'].'</strong> </span>';
echo '<p align="justify">'. $r['decription'].'</p>';
echo '<div><span><a href="#">Оф. сайт</a></span>';
echo '<span class="stars"></span>';
echo '<span><a href="'. $r['link'].'">Подробнее..</a></span></div></li>';

}
echo $end_result;
} else {
echo '<h2 style="padding-bottom: 150px;">По вашему запросу ничего не найдено</h2>';
}
}
?>



так лучше?

Спустя 1 минута, 49 секунд (22.11.2011 - 21:33) Winston написал(а):
Вот корректный поиск
"SELECT * 
FROM `tbl`
WHERE `field`
LIKE '%"
. addcslashes(mysql_real_escape_string($search), '%_\\\'') . "%'"

Спустя 7 минут, 12 секунд (22.11.2011 - 21:40) svkarasev написал(а):
Цитата (Winston @ 22.11.2011 - 18:33)
Вот корректный поиск
"SELECT * 
FROM `tbl`
WHERE `field`
LIKE '%"
. addcslashes(mysql_real_escape_string($search), '%_\\\'') . "%'"

Сделал так $sql = "SELECT * FROM planes WHERE name LIKE '%" . addcslashes(mysql_real_escape_string($post), '%_\\\'') . "%' ORDER BY dt_create DESC LIMIT 10"; работает =)
да и еще google посылает куда подальше... хочу сделать так чтоб в поиск можо было ввести не меньше 3 букв нои не больше 10
Помогите =)
P.S. дА И ТЕПЕРЬ МОЙ ПОИСК ЗАЩИЩЕН ОТ ИНЪЕКЦИЙ?

<?php
//получаем данные через $_POST
$post =$_POST['search'];
if (!get_magic_quotes_gpc())
{
$post = addslashes($post);
}

$highlight = str_replace(" ", "|", $good);
if (isset($post)) {
// подключаемся к базе
include('php/connect.php');
$db = new db();
// Строим запрос
$sql = "SELECT * FROM planes WHERE name LIKE '%" . addcslashes(mysql_real_escape_string($post), '%_\\\'') . "%' ORDER BY dt_create DESC LIMIT 10";
// Получаем результаты
$row = $db->select_list($sql);
if(count($row)) {
$end_result = '';
foreach($row as $r) {
echo '<li class="grid_4"><a href="'. $r['link'].'"><img src="'. $r['mini_img_300x100'].'" alt="'. $r['name'].'" width="300" height="100"/></a>';
echo '<h3><a href="'. $r['link'].'">'. $r['name'].'</a></h3>';
echo '<span class="price"><strong>'. $r['dt_create'].'</strong> </span>';
echo '<p align="justify">'. $r['decription'].'</p>';
echo '<div><span><a href="#">Оф. сайт</a></span>';
echo '<span class="stars"></span>';
echo '<span><a href="'. $r['link'].'">Подробнее..</a></span></div></li>';

}
echo $end_result;
} else {
echo '<h2 style="padding-bottom: 150px;">По вашему запросу ничего не найдено</h2>';
}
}

?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.