|
|
|
| Вот код моего поискового скрипта:
<?php
//connection to MySQL
$db_host = "localhost";
$db_user = "login";
$db_password = "password";
$db_name = "my_db";
$connection = mysql_connect ($db_host, $db_user, $db_password) or die ('error connection');
mysql_select_db($db_name, $connection);
//variables
@$id =$_GET['id'];
@$name =$_GET['name'];
@$page =$_GET['page'];
@$group_production =$_GET['group_production'];
//chekboxes
if ( empty($name ) )
{
// не заполнено поле
die("<div class='search' align='center'>
<font color='#CC0000'><b>Необходимо заполнить поле поиска!</b></font></div>");
}
if (isset($id)) {
$srch='id';} //id - имя столбца в таблице
if (isset($name)) {
$srch='name';} //name - имя столбца в таблице
if (isset($page)) {
$srch='page';} //page - имя столбца в таблице
if (isset($group_production)) {
$srch='group_production';} //group_production - имя столбца в таблице
@$query = "SELECT * FROM tovary WHERE $srch like '%$name%' ";
$result = mysql_query($query) or die('Ошибка запроса');
if ( mysql_num_rows($result) == 0 ) {
print("<div class='search' align='center'>
<font color='#CC0000'><b>По вашему запросу ничего не найдено! Попробуйте изменить форму поиска.</b></font></div>");
} else {
print("<table border='1' cellspacing='1' cellpadding='1' class='search'><caption align=top class='search'>Результат поиска:</caption><tr><td width='35%' class='search_top' align='center'><b>Наименование товара</b></td><td width='20%' class='search_top' align='center'><b>Страница в каталоге</b></td><td width='30%' class='search_top' align='center'><b>Группа товаров</b></td></tr>");
// Переменная i следит чередование цвета
$i = 0;
while($t = @mysql_fetch_array($result)) {
$i++;
$class = ( $i % 2 == 0 ) ? "odd" : "even";
print('
<style>
.odd{background:99FFCC}
.even{background:FFFFCC}
</style>
<tr class="'.$class.'">
<td width="35%" class="search"><font color="#000000">'.$t[name].'</font></td>
<td width="20%" class="search"><a class="1" href="'.$t[page].'?id='.$t[id].'">Найти на странице</a></font></td>
<td width="30%" class="search"><font color="#000000">'.$t[group_production].'</font></td>
</tr>');
}
print("</table>");
}
?>
|
Сам я в этом ничего не волоку, но те кто его видел, как-то пространно намекали на уязвимость кода (или БД???). Вобщем если такая проблема действительно есть, то большая просьба указать в каком месте и пути ее устранения. Заранее благодарю. | |
|
|
|
|
|
|
|
для: mjc66
(20.06.2007 в 15:18)
| |
@$query = "SELECT * FROM tovary WHERE $srch like '%$name%' ";
замени на
@$query = "SELECT * FROM tovary WHERE $srch like '%".mysql_escape_string(addslashes($name))."%' ";
|
| |
|
|
|
|
|
|
|
для: Ressfourt
(20.06.2007 в 15:37)
| | нет инициализации переменной $srch.
В пхп это не обязательно, но при включенной register_globals это создает дополниьельную дыру в безопасности.
Эта переменная у Вас инициализируется только при выполнении if(). Т.е. можно подделать форму так чтобы не одно из условий невыполнилось и передать
инъекцию в переменной $srch. Это плохо.
Вобще весь код было бы неплохо переписать. | |
|
|
|
|
|
|
|
для: hammet
(20.06.2007 в 15:46)
| | При заполненном $name переменная $srch в этом скрипте инициализирована всегда
Внимательно читайте код.
При незаполненном - скрипт уходит по die(), и тогда ему безразличны любые переменные. | |
|
|
|
|
|
|
|
для: Trianon
(20.06.2007 в 16:26)
| | Передумал =) | |
|
|
|