Opened 14 months ago

Closed 14 months ago

Last modified 12 months ago

#1084 closed дефект (готово)

Система обслуживает запросы без аутентификации

Reported by: alx Owned by: Denis_N
Priority: critical Component: БД изделий АДС
Keywords: Cc:

Description

r162/base

Выполняю curl 'https://r2.adc-line.ru/base/main.php' - получаю в ответ HTML страницу с запрошенными данными (то есть со списком изделий) из БД!

Ожидал получить отказ с предложением аутентифицироваться.

Change History (6)

comment:1 by alx, 14 months ago

Дополнительная информация. В ответ сервер выдает сразу два документа HTML! Первый - "пустой" с <meta http-equiv="refresh" content="0; url=http://localhost/index.php?error=1"> (см. #1083), а сразу за ним - второй, уже с данными, как если бы запрос был от аутентифицированного пользователя:

        <html><head>
        <title></title>
        <meta http-equiv="refresh" content="0; url=http://localhost/index.php?error=1">
        </head>
        <body>
        </body>
        </html><!DOCTYPE html>
<html>
 <head>
 <meta charset=utf-8">
<link rel="icon" href="images/favicon.ico">
<link rel="stylesheet" href="css/main.css?random=@Environment.TickCount">
<link rel="stylesheet" href="css/jquery-ui.css">
<script src="js/jquery.js"></script>
<script src="js/script.js"></script>
<script src="js/jquery-ui.js"></script>
  <title>Главная</title>
 </head>
 <body>
...............
</body>
</html>

comment:2 by alx, 14 months ago

Попробовал запросить другую страницу - например mismatch.php: curl -d 'serial=F00126' -d 'nextbtn=Далее' -D- 'https://r2.adc-line.ru/base/mismatch.php' Опять получил в ответ сразу два HTML документа в теле ответа. Второй содержит историю запрошенного изделия, как если бы обращался аутентифицированный пользователь:

        <html><head>
        <title></title>
        <meta http-equiv="refresh" content="0; url=http://localhost/index.php?error=1">
        </head>
        <body>
        </body>
        </html><!DOCTYPE html>
<html>
 <head>
 <meta charset=utf-8">
<link rel="icon" href="images/favicon.ico">
<link rel="stylesheet" href="css/main.css?random=@Environment.TickCount">
<link rel="stylesheet" href="css/jquery-ui.css">
<script src="js/jquery.js"></script>
<script src="js/script.js"></script>
<script src="js/jquery-ui.js"></script>
         
  <title>Несоответствия</title>
 </head>
 <body>
 <div class="header"><div id = "openSerialSearchBtn">Поиск по №<br>(Ctrl+?)</div><div id = "serialSearch" style = "display: none;"><div class = "filters"><label class = "filterName">Серийный номер</label><label class="filterInput"> <input type = "text" id = "serialSearchInp"></label><a id ="serialSearchBtn" href="main.php?" target="_blank" <button type = "button" name = "maxrows">Перейти на главную<br>(Enter)</button></a>       </div></div><div class="dropdown"><button class="dropbtn" align="center"><img id = "menu" src = "images/menu.png"></button><div class="dropdown-content"><a href="index.php">Авторизоваться</a></div></div><a href="main.php" style = "position: absolute;"><img  id="adc" src="images/adc.png" align="center"></a><div id="worker"><p>r162</p><p><img id="exit"></p></div></div> <div id="forma">
                <form action="mismatch.php" method="post" align="left" class="form1">
                        <p id="priem_name" align="center">Несоответствия</p>
                        <div class="inputLabelCreateOrder" style = "display: inline-flex;">
                        <div class="inputLabelCreateOrder" style = "display: inline-flex;"><div class = "inputLabel"><label>Серийный номер</label><input type="text" name="serial" class = "focusOnloadPage" maxlength="10"  oninput="hideotk()" value = "F00126" required/> </div></div>
                        </div>
                        <input type="submit" id="nextbtn" name = "nextbtn" value="Далее" />
                                <div id = "contentOtk" style = "margin-top:2em;"><table class="tableOtk" ><caption>SM-02 Плата</caption><tr><td>Время / Дата</td><td>Тип записи</td><td>Статус</td><td>Сотрудник</td><td>Комментарий</td></tr><tr><td>31-01-2023 / 14:32</td><td>Тестирование</td><td>Успешно</td><td>xxxxxxxx</td><td>Пусто</td></tr></table><label style = "margin-top: 1em" >Комментарий</label><textarea class="comment" type="text" name="comment"></textarea><input type="submit" id="savedata" name = "savebtn" value="Сохранить данные"/>                               
                        </div>
                </form>
        </div>
        <div class="footer"><p>Для служебного пользования сотрудниками АДС</p></div>    <script>

Имя тестировавшего сотрудника я заменил на "xxxxxxxx".

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

comment:3 by Denis_N, 14 months ago

Было исправлено в r166/base. Причина такого поведения была в том, что скрипт не умирал, а продолжал выполняться дальше после прерывания сессии. Если сравнить r160/base и r166/base, то в 160-й ревизии видно, что отсутствует функция die() в функции error403() в main.lib.php

comment:4 by Denis_N, 14 months ago

Resolution: готово
Status: newclosed

in reply to:  3 ; comment:5 by alx, 14 months ago

Replying to Denis_N:

Было исправлено в r166/base.

В сообщении коммита об этом ничего не сказано...

Если сравнить r160/base и r166/base, то в 160-й ревизии видно, что отсутствует функция die() в функции error403() в main.lib.php

Насколько я вижу, в changeset:166/base die не добавлялось. Оно там и так уже было...

in reply to:  5 comment:6 by alx, 12 months ago

Replying to alx:

В сообщении коммита об этом ничего не сказано...

Насколько я вижу, в changeset:166/base die не добавлялось.

Denis_N, не хочешь это прокомментировать? Все выглядит так, что changeset:166/base ты указал ошибочно...

Note: See TracTickets for help on using tickets.