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

Форум PHP

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

 

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

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

тема: Исследование кода входа на sql-инъекцию
 
 автор: tokmak   (02.04.2008 в 00:19)   письмо автору
 
 

Всем Здрасти!
Вот такая штука, помогите исследовать код на sql-инъекцию или другие баги.
Спасибо.

<?
error_reporting
(0);
include (
"../setup.php");
$resultg=mysql_query("select * from seting ");
$rog=mysql_fetch_array($resultg);
$Users = array($rog[0] => $rog[1]);
session_start();
session_register("SESSION");
if (! isset(
$SESSION)) {
$SESSION = array();
}
if(
$event=='exit') {
unset (
$SESSION["password"]);
unset (
$SESSION["username"]);
}
if(
$enter) { 
$SESSION["username"] = $user;
$SESSION["password"] = $passw;

$username $SESSION["username"];
$password $SESSION["password"];
$dd array_search($password$Users);
?>
<style type=text/css>
input { FONT-FAMILY: MS Sans Serif; FONT-SIZE: 10px; }
select { FONT-FAMILY: MS Sans Serif; FONT-SIZE: 10px; }
a:hover { color: #86869B }
a:visited { color: navy }
a { color: navy }
a:active { color: #ff0000 }
body { FONT-FAMILY: Times New Roman; FONT-SIZE: 13pt; COLOR: #1F1F1F; }
</style>
<? if (empty($password) or $dd !== $username) { ?>
<center>
    <form action="<?=$PHP_SELF?>" method="post">
        <p>&nbsp;</p>
        <h3 style="color:green"><font face="Verdana" color="#FF0033">&nbsp; Вход для администратора</font><font face="Verdana" color="maroon"></font><font face="Verdana"></font></h3>
        <table align="center" border="0" height="124">
            <tr>
                <td align="center" colspan="2">&nbsp;</td>
            </tr>
            <tr>
                <td align="right"><font face="Verdana">Логин:</font></td>
                <td><font face="Verdana"><input type="text" name="user" size="22"></font></td>
            </tr>
            <tr>
                <td align="right"><font face="Verdana">Пароль:</font></td>
                <td><font face="Verdana"><input type="password" name="passw" size="22"></font></td>
            </tr>
            <tr>
                <td align="right"></td>
                <td><font face="Verdana"><input type="submit" value="Войти" name="enter">
        </font>

                </td>
            </tr>
            <tr>
                <td align="right" colspan="2">
</td>
            </tr>
        </table>
    </form>
    <? 
die(); 

?>

   
 
 автор: Atheist   (02.04.2008 в 00:24)   письмо автору
 
   для: tokmak   (02.04.2008 в 00:19)
 

Конкретно в этом коде нет и не может быть SQL Injection'ов, потому что тут встерчается только один запрос, который не формируется с учетом параметров, переданных от пользователя.

   
 
 автор: tokmak   (02.04.2008 в 00:27)   письмо автору
 
   для: Atheist   (02.04.2008 в 00:24)
 

Т.е. в данном коде нету багов, и его можно смело использовать?

   
 
 автор: Atheist   (02.04.2008 в 00:49)   письмо автору
 
   для: tokmak   (02.04.2008 в 00:27)
 

> Т.е. в данном коде нету багов
Отсутствие уязвимостей еще не говорит о том, что нет багов. Данный код сделан неправильно.

   
 
 автор: tokmak   (02.04.2008 в 01:30)   письмо автору
 
   для: Atheist   (02.04.2008 в 00:49)
 

А вы не могли бы сказать в чем именно не правильность?

   
 
 автор: Atheist   (02.04.2008 в 01:56)   письмо автору
 
   для: tokmak   (02.04.2008 в 01:30)
 

Как минимум:

> $rog=mysql_fetch_array($resultg);
> $Users = array($rog[0] => $rog[1]);

Это ты получишь только первый попавшийся в таблице аккаунт, а не всю таблицу. Это при условии, что там вообще что-то есть, иначе будут ошибки.

> $dd = array_search($password, $Users);
Так дела не делают. Раз уж хранишь в базе данных, так и ищи с помощью её инструментов.

> if($event=='exit')
Что за $event? Откуда? Можно, конечно, предположить, что эта переменная определяется в "setup.php", но я в этом сомневаюсь. Скорее, это попытка писать под register_globals = "on", который, к счастью, в дальнейшем будет исключен из ядра.

> if($enter) {
> $SESSION["username"] = $user;
> $SESSION["password"] = $passw;
> }
Аналогично. $enter, $user, $passw не определены.

> <?=$PHP_SELF?>
И это: $_SERVER['PHP_SELF']

> session_register("SESSION");
> $SESSION ...
Всё это старый стиль. Сейчас уже давно используют $_SESSION и session_register() не нужна.

> die();
Скажи, а зачем die в конце кода?

   
 
 автор: STEVER   (02.04.2008 в 15:05)   письмо автору
 
   для: Atheist   (02.04.2008 в 01:56)
 

>> die();
>Скажи, а зачем die в конце кода?

ЧТО БЫ СКРИПТ УМЕР!!! =)

   
Rambler's Top100
вверх

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