[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Безопасность)
СЧ Лунный
Здравствуйте! Пишу инет-магазин, первый опыт и прошу совета) В админке нет никаких проверок в полях редактирования для описания товара - ни стрип-тегов, ничего подобного. Сделано это для того, чтобы админ сам мог вставлять любые HTML-объекты самостоятельно. Решил пойти по пути запрета входа в админку для всех остальных - тех, у кого нет админской сессии выкидывает. Прошу совета - нет ли где потенциальных дыр?

Это - первый опыт, но вроде получилось неплохо)


Код
PHP
<?php session_start();
require(
"config.php"); 

if(!isset(
$_SESSION['admin']))
 
header("location:index.php"); 
if(isset(
$_POST['vhod']))//Начало скрипта входа
{
    
$login=$_POST['login'];
    
$pwd=$_POST['pwd'];
    
$ozu=$_POST['ozu'];
    
$login=strip_tags($login);
$login=trim($login);
$pwd=strip_tags($pwd);
$pwd=trim($pwd);
$sql="SELECT * FROM users WHERE login='$login' AND pwd='$pwd'"
$rez=mysql_query($sql);
$mas=mysql_fetch_array($rez);
if(
$_POST['login']==$mas[login])
 {
 if(
$_POST['pwd']==$mas[pwd])
 {
if(
$mas[prim]=='a')
{
 
$_SESSION['admin']="$login";    
}

                        
$_SESSION['user']="$login";
                        if(isset(
$_SESSION['admin']))
                        unset(
$_SESSION['user']);
                        if(
$ozu='yes')
                        {
                            

                        }
                         
header("location:index.php"); 
                        }
                        else echo 
"Неправильный логин!";
                        }
                            else echo 
"Неправильный пароль!";

                            }
// Скрипт  входа
if(isset($_GET['exit']))
unset(
$_SESSION['user']);
if(isset(
$_GET['exitadmin']))
unset(
$_SESSION['admin']);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style> margin:0px 0px 0px 0px;
    padding:0px 0px 0px 0px;
 </style>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Администрирование</title>
<link rel="stylesheet" type="text/css" href="1.css" />
</head>

<body background="фон.gif">
<div class="shapka"><?php 
$sql
="SELECT * FROM infa ORDER BY id DESC limit 1"
$sql=mysql_query($sql);
while(
$mas=mysql_fetch_array($sql))
{
    echo 
"<p style='margin-top:200px; margin-left:55px; color:#993333; font-size:36px'>$mas[nazv]</p>";

echo 
"<p style='color:#993333; font-size:24px; margin-left:55px; margin-top:70px'>$mas[op]</p>";
}
?><p class="tel2">(812)</p><p class='tel'>544-90-33</p>
</div>
<div class="shapka2"><table class="reg"><tr><td><?php 
if(isset($_SESSION['user']))
{

echo 
"Здравствуйте, "
echo 
$_SESSION['user']; 
echo 
"<p><a href='?exit='ok'>Выход</a>";

}
elseif(isset(
$_SESSION['admin']))
{
    
echo 
"Режим администрирования";
echo 
"<p>Здарвствуйте, ";
echo 
$_SESSION['admin'];
echo 
"<p><a href='?exitadmin='ok'>Выйти из режима администрирования</a>";
echo 
"<p><a href='admin.php'>Войти в админку</a>";

}
else echo 
"</td></tr><form method='post'><tr><td>Логин</td><td><input type='text' name='login'></td><td></td></tr><tr><td>Пароль</td><td><input type='password' name='pwd'></td><td><input type='submit' name='vhod' value='войти' style='background-image:url(кнопка.gif)'></td></tr><tr><td></td><td><a href='register.php'>Регистрация</a><br><a href='passport.php'>Забыли пароль?</a></td><td><input type='checkbox' name='ozu' value='yes'>Запомнить</td></tr></form>"?></table></div>


<div class="menu"><ol class="spisok"><li><a href='index.php'>О компании</a></li><li><a href='bulletin.php'>Новости</a></li><li><a href='zakaz.php'>Как сделать заказ</a></li<li><a href='prise.php'>Прайс-лист</a></li><li><a href='vacansy.php'>Вакансии</a></li></ol></div>


<div class="panel"><table width='100%'><tr><td width='25%' valign="center"><img src='корзинка.gif'> товаров <input type='text' name='tovar' size='7' disabled="0" <?php 

$result 
mysql_query("SELECT * FROM nzakaz WHERE prim='оформлен'"); 
    
$num_rows mysql_num_rows($result); 
    echo 
"value='$num_rows'";
    
?>></td><td width='25%'><img src='валюта.gif'> валюта <input type='text' name='valuta' size='3' disabled="0" value=руб></td><td><img src='sale.gif'> на сумму <input type='text' size='8' disabled="0" <?php 

    

$login
=$_SESSION['user'];
$sql=mysql_query("SELECT sum(sale) FROM nzakaz WHERE prim='оформлен'"); 
$sql=mysql_result($sql,0);
echo 
"value='$sql'";

?>></td><td width="25%"><img src='zkaz.gif'><a href='sale.php'>оформить заказ</a></td></tr></table></div>


<div class="lbloc"><h3>Меню админа</h3><br><a href='admin.php'>Редактировать описание магазина</a><br><a href='anovost.php'>Добавить новость</a><br><a href='avacansy.php'>Добавить вакансию</a><br><a href='ablank.php'>Загрузка бланков оплаты</a><br><a href='atovar.php'>Добавить товар</a><br><a href='aogolos.php'>Добавить голосование</a><hr width="70%" style="margin-left:0px"><h3>Заказы</h3><a href='aozakaz.php'>Все оформленные заказы</a><br><a href='aotzakaz.php'>Отправленные заказы</a><br><a href='adzakaz.php'>Доставленные заказы</a></div>


<div class="magaz" style='height:1500px'><h3>Редактирование описания магазина и описания способа оплаты</h3><p>
<?php
if(isset($_POST['red']))// Редактирование описания магазина
{
    
$magaz=$_POST['magaz']; 
    
$web=$_POST['web'];
    
$bk=$_POST['bk'];
    
$d=$_POST['d']; 
    
$nal=$_POST['nal']; 
    
$nazv=$_POST['nazv'];
    
$op=$_POST['op'];
    
$yandex=$_POST['yandex'];
    
$sber=$_POST['sber'];
    
$sql="UPDATE infa SET magaz='$magaz'";
    
$rez=mysql_query($sql);
    if(
$yandex!='')
    {
        if(
$yandex!='Инструкция покупателю для покупки')
        {
            
        
    
    
$sql="UPDATE infa SET yandex='$yandex'"
    
$rez=mysql_query($sql);
    }
        }
        if(
$web!='')
        
    {
        if(
$web!='Инструкция покупателю для покупки')
        {
            
        
    
    
$sql="UPDATE infa SET webmoney='$web'";
    
$rez=mysql_query($sql);
    } 
    }
        if(
$nal!='')
    {
        if(
$nal!='Инструкция покупателю для покупки')
        {
            
        
    
    
$sql="UPDATE infa SET nal='$nal'";
    
$rez=mysql_query($sql);
    }
    }
        if(
$bk!='')
    {
        if(
$bk!='Инструкция покупателю для покупки')
        {
            
        
    
    
$sql="UPDATE infa SET bk='$bk'"
    
$rez=mysql_query($sql);
    } 
    }
        if(
$d!='')
    {
        if(
$d!='Инструкция покупателю для покупки')
        {
            
        
    
    
$sql="UPDATE infa SET migom='$d'";
    
$rez=mysql_query($sql);
    }
    }
        if(
$sber!='')
    {
        if(
$sber!='Инструкция покупателю для покупки')
        {
            
        
    
    
$sql="UPDATE infa SET sber='$sber'";
    
$rez=mysql_query($sql);
    }
    }
        if(
$nal!='')
    {
        if(
$nal!='Инструкция покупателю для покупки')
        {
            
        
    
    
$sql="UPDATE infa SET np='$nal'";
    
$rez=mysql_query($sql);
    }
    }    
            if(
$magaz=='Описание магазина')
    {
    
        if(
$magaz!='Инструкция покупателю для покупки')
        {
            
        
    
    
$sql="UPDATE infa SET magaz='$magaz'";
    
$rez=mysql_query($sql);
    }
    }    
                if(
$nazv!='')
    {
        
            
        
    
    
$sql="UPDATE infa SET nazv='$nazv'";
    
$rez=mysql_query($sql);
    
    }    
                if(
$op!='')
    {
        
            
        
    
    
$sql="UPDATE infa SET op='$op'";
    
$rez=mysql_query($sql);
    
    }    
    echo 
"<p class='pred'>Информация о магазине успешно изменена!";// конец

}
?>
<table width='90%' bgcolor="#FFFFFF"><form method ='post'><tr><td>Приветствую, </td><td><?php echo $_SESSION['admin']; ?></td></tr><tr><td>Название магазина</td><td><input type='text' name='nazv'></td></tr><tr><td>Описание магазина</td><td><input type='text' name='op'></td></tr><tr><td>Описание оплаты Мигом</td><td><textarea cols='30' rows='10' name='d'>Инструкция покупателю для покупки</textarea></td></tr><tr><td>Описание оплаты по банковской карте</td><td><textarea name='bk' cols='30' rows=10'>Инструкция покупателю для покупки</textarea></td></tr><tr><td>Описание оплаты по web-money</td><td><textarea cols='30' rows='10' name='web'>Инструкция покупателю для покупки</textarea></td></tr><tr><td>Описание оплаты наложенным платежом</td><td><textarea cols='30' rows='10' name="nal">Инструкция покупателю для покупки</textarea></td></tr><tr><td>Описание оплаты Яндекс-деньгами</td><td><textarea cols='30' rows='10' name="yandex">Инструкция покупателю для покупки</textarea></td></tr><tr><td>Описание оплаты через сбербанк</td><td><textarea cols='30' rows='10' name='sber'>Инструкция покупателю для покупки</textarea></td></tr><tr><td> Введите описание магазина</td><td><textarea cols='30' rows='10' name='magaz'>Описание магазина</textarea></td></tr><tr><td><input type='submit' name='red' value='Редактировать'></td></tr></form></table></p>


 </div>

<div class="novosti" style='margin-top:-1500px'><table width='100%' background="фон.gif"><tr><td height="50" bgcolor='#330000'></td></tr><form method='post' action="search.php"><tr><td height="80"><input type='text' name="poisk">  <input type='submit' name='search' value='найти' style="background-image:url(кнопка.gif)"></td></tr></form><tr><td><a href='search.php'>расширенный поиск</a></td></tr><tr><td height='50' bgcolor='#330000'></td></tr></table>
<?php 
$rez
=mysql_query("SELECT count(id)FROM novosti");
$vsego=mysql_result($rez,0);
if(isset(
$_GET[page]))
$page=$_GET[page];
else 
$page=1;
$kol_on_page=5;
$ot=$kol_on_page*$page-$kol_on_page;
$do=$kol_on_page*$page-1;
$kol_pages=ceil($vsego/$kol_on_page);
$sql="SELECT * FROM novosti ORDER BY id desc";
$rez=mysql_query($sql);
$i=0;
while(
$mas=mysql_fetch_array($rez))
{

$i++;
if(
$i<$ot || $i>$do)continue;
echo 
"$num. <table border='0' background='фон.gif' style='width:100%; margin-left:0%'><tr><td><small class='date'>$mas[date]</small></td><td><a href='novost.php?id=$mas[id]'>$mas[theme]</a></tr><tr><td>"
$novost=$mas[novost];
$message="";

$textarr=explode(" "$novost);
if(
count($textarr) > 10)
{ for(
$j=0$j<10$j++) 

$message.=$textarr[$j]."\r\n"
}
echo 
$message[$j];
$message.="<a href='novost.php?id=$mas[id]'>Подробнее</a>";
}
else
$message $novost; }
$textarr="";
echo 
"$message.";
echo 
"</td></tr></table>"; echo "<hr color='#996633' size='4'>";

}
?> 
<table width="100%"><tr><td height="50" bgcolor='#330000'></td></tr></table>
<table  background="фон.gif" width="100%"><tr><td><?php 
if(isset($_SESSION['user']))
{
    

$sql=mysql_query("SELECT *FROM golos ORDER BY id desc LIMIT 1");
while(
$mas=mysql_fetch_array($sql))
{
    echo 
"<h4>Текущее голосование</h4>";    
    echo 
"$mas[vopros]";
}
}
?></td></tr></table>
<p><table background="фон.gif" width="100%"><form method='post'<?php 
if(isset($_SESSION['user']))
{


$sql=mysql_query("SELECT *FROM golos ORDER BY id desc LIMIT 1");
while(
$mas=mysql_fetch_array($sql))
{
    echo 
"<tr><td>$mas[o1]</td><td><input type='radio' name='golos' value='один'></td></tr><tr><td>$mas[o2]</td><td><input type='radio' name='golos' value='два'></td></tr>"
if(
$msa[o3]!='')
{
    

echo 
"<tr><td>$mas[o3]</td><td><input type='radio' name='golos' value='три'></td></tr>"
}
if(
$mas[o4]!='')
{
    

echo 
"<tr><td>$mas[o4]</td><td><input type='radio' name='golos' value='четыре'></td></tr>"
}
if(
$mas[o5]!='')
{
    

echo 
"<tr><td>$mas[o5]</td><td><input type='radio' name='golos' value='пять'></td></tr>"
}
if(
$mas[o6]!='')
{
    

echo 
"<tr><td>$mas[o6]</td><td><input type='radio' name='golos' value='шесть'></td></tr>";
}
}
}

?> <tr><td><?php 
if(isset($_SESSION['user']))
{
    

$login=$_SESSION['user'];
$sql="SELECT * FROM golos ORDER BY id desc LIMIT 1"
$sql=mysql_query($sql);
while(
$mas=mysql_fetch_array($sql))
{
    
$name=$mas[vopros]; 
}
$sql="SELECT * FROM ogolos WHERE user='$login' AND golos_name='$name' limit 1"
$sql=mysql_query($sql);
while(
$mas=mysql_fetch_array($sql))
{
    
$login=$_SESSION['user'];
    
$name=$mas[user]; 
    }
    if(
$name!=$login)
    {
        
    if(isset(
$_SESSION['user']))
    {
        
    
        echo 
"<input type='submit' name='ok' value='Проголосовать' style='background-image:url(кнопка.gif)'>";
        }
    }
    if(
$login==$name)
    {
        echo 
"<a href='vote.php'>Результаты</a>";
    }
}
?></td></tr></form></table></p>
</div>

<div class="nblock"><hr color='#996666' size='5'><p class="copy">Создатель сайта Н.М.<br>Copyright© Все права защищены</p><p class='tel3'>тел.:(812)000-00-00</p></div></body></html>




Спустя 1 минута, 15 секунд (24.06.2009 - 01:22) СЧ Лунный написал(а):
Сообщение обрезолось) Но, там дальше просто закрывается див, боди и ХТМЛ)

Спустя 32 минуты, 37 секунд (24.06.2009 - 01:54) FatCat написал(а):
СЧ Лунный
Чуть-чуть помог с оформлением. Вроде ничего не попортил. smile.gif

Спустя 10 минут, 9 секунд (24.06.2009 - 02:05) СЧ Лунный написал(а):
FatCat , спасибо)

А насчёт безопасности - всё нормально? Первый опыт, непосредственно на заказ и волнуюсь поэтому немного) Но, по идее, если нет админской сессии, то никто не сможет получить доступ к странице? И то, что нет проверки данных из формы не страшно? Основной вопрос тут в этом.

Спустя 16 минут, 47 секунд (24.06.2009 - 02:21) FatCat написал(а):
Цитата (СЧ Лунный @ 24.06.2009 - 03:05)
А насчёт безопасности - всё нормально?

В 3 часа ночи вчитываться в такую портянку кода? Моего героизма не хватит на такое. laugh.gif

Спустя 4 минуты, 46 секунд (24.06.2009 - 02:26) FatCat написал(а):
Цитата
$pwd=$_POST['pwd'];

$sql="SELECT * FROM users WHERE login='$login' AND pwd='$pwd'";


Входящая переменная напрямую подставляется в sql-запрос?
Собственно, вот и дырка.

А если ввести в поле пароля такое:
Код
123';TRUNCATE users;
?

Как думаете, что станет с таблицей пользователей?

Спустя 7 минут, 35 секунд (24.06.2009 - 02:34) СЧ Лунный написал(а):
Так, в том-то и дело, что я изначально в админке не делаю никаких проверок умышленно. Расчёт идёт на то, что админ сможет делать то, что душе его угодно будет. На всех остальных страницах все поля очищаются от тегов, удаляются все лишние пробелы и так далее.

PHP
if(!isset($_SESSION['admin']))
 
header("location:index.php");


Мой расчёт строится на этих двух строчках в самом начале кода. То есть, не допустить возможности проникновения в админку постороннего человека, одновременно дать админу полную свободу деятельности.

Спустя 4 часа, 18 минут, 45 секунд (24.06.2009 - 06:53) glock18 написал(а):
Цитата (СЧ Лунный @ 23.06.2009 - 23:34)

Мой расчёт строится на этих двух строчках в самом начале кода. То есть, не допустить возможности проникновения в админку постороннего человека, одновременно дать админу полную свободу деятельности.


угу, даже

Цитата (FatCat @ 23.06.2009 - 23:26)
TRUNCATE users;


через жопу sql-инъекцию. Это такой жосткий админ.
Лучше послушай что тебе здешний администратор smile.gif он не такой суровый, как твой админ, а говорит всегда по делу.

вообще все это читать желания нет. я тоже могу сюда выложить свой движок на... 30 что ли файлах... это только ядро. плюс обычно не меньше двух на каждую страницу. но ведь понимать надо, что во всем этом разбираться особо нет желания.

Еще добавлю как где-то здесь говорил. Твой код очень плохо структурирован и имеет много ляпов, а ты думаешь уже над безопасностью. Писать если будешь, придерживаясь нормальной структуры, это поможет другим найти, что у тебя там с безопасностью, а тебе - поправить дырки.

Спустя 20 минут, 39 секунд (24.06.2009 - 07:13) Kuliev написал(а):
СЧ Лунный
[quote]
PHP
if(isset($_POST['vhod']))//Начало скрипта входа
{
    
$login=$_POST['login'];
    
$pwd=$_POST['pwd'];
    
$ozu=$_POST['ozu'];
    
$login=strip_tags($login);
$login=trim($login);
$pwd=strip_tags($pwd);
$pwd=trim($pwd);
$sql="SELECT * FROM users WHERE login='$login' AND pwd='$pwd'"
$rez=mysql_query($sql);
$mas=mysql_fetch_array($rez);
if(
$_POST['login']==$mas[login])
 {
 if(
$_POST['pwd']==$mas[pwd])
 {
if(
$mas[prim]=='a')
{
 
$_SESSION['admin']="$login";    
}
[/
quote]


А у тебя пароль лежит в базе не зашифрованный?
Данная структура кода очень схожа с "индусским кодом"

Спустя 10 минут, 54 секунды (24.06.2009 - 07:24) glock18 написал(а):
ну это такой... код... начинающего индуса biggrin.gif индусы-профи - боги по засир увеличению количества строк кода, до которых всем простым смертных далеко.
Быстрый ответ:

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