Страница 1 из 1

Вопрос по безопасности

Добавлено: 02 янв 2012, 22:57
kuzmin@academic.ru
Обнаружил, что при просмотре отчета на сервер посылается SQL-запрос, который выполняет handler.php
Проблема даже не в том, что этот запрос видно :( А в том, что злоумышленник может послать на сервер произвольный запрос, который серверная часть послушно выполнит. А там может быть все что угодно, начиная от получения данных, заканчивая банальным их уничтожением.
http://asupb.ru/stimulsoft_query.png
Изображение

Теоретически, конечно, надо бы под каждый отчет создавать на сервере отдельный скрипт, который знает, какие данные нужно посылать. А из вьювера отчетов посылать какой-то идентификатор...

М.б. есть какие-то более простые решения?

Вопрос по безопасности

Добавлено: 03 янв 2012, 12:42
Vladimir
Здравствуйте,

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

Спасибо.

Вопрос по безопасности

Добавлено: 11 фев 2012, 22:27
kuzmin@academic.ru
Доброе время суток. Как дела с доработкой по данной проблеме? IMHO, запросы, конечно нужно хранить на сервере, а из отчета просто посылать какой-либо идентификатор (хеш)

Вопрос по безопасности

Добавлено: 13 фев 2012, 13:31
Vladimir
Здравствуйте,

Доработку запланировано реализовать к официальной версии 2012.1, которая будет доступна в марте.
IMHO, запросы, конечно нужно хранить на сервере, а из отчета просто посылать какой-либо идентификатор (хеш)
В данный момент, в качестве обходного пути это можно реализовать - в отчёте вместо запроса передавать какой-либо уникальный идентификатор запроса, а на сервере его заменить на реальный запрос (файл handler.php, команды RetrieveColumns и LoadData).

Спасибо.

Вопрос по безопасности

Добавлено: 28 мар 2012, 18:07
evg
Vladimir писал(а): В данный момент, в качестве обходного пути это можно реализовать - в отчёте вместо запроса передавать какой-либо уникальный идентификатор запроса, а на сервере его заменить на реальный запрос (файл handler.php, команды RetrieveColumns и LoadData).
Здравствуйте,

если отчет использует вот такого плана запрос:
select *
from table
where field_date between '{dStart.ToString("yyyy-MM-dd")}' and '{dEnd.ToString("yyyy-MM-dd")}'

dStart, dEnd - переменные в отчете ( которые, как я понял, меняются на значения на клиентской стороне )
речь об изменении переменных на панели самого вьювера...
( без передачи их в query_string-е )

т.е. если прописать ИД запроса в дизайнере, то значения переменных не будут заменены и на сервер придет запрос без изменений.
А после отработки sti_parse_query_parameters запрос превратится в :

select *
from table
where field_date between '' and ''

Собственно вопрос: так ли это ? и можно это как-нибудь победить ?
(чтобы работать через запросы, которые лежат в своей БД,
чтобы вьювер передавал только уникальный ИД запроса и чтобы при этом функционал с переменными работал по-прежнему )
Vladimir писал(а): Доработку запланировано реализовать к официальной версии 2012.1, которая будет доступна в марте.
Еще не готова ?


Вопрос по безопасности

Добавлено: 30 мар 2012, 10:54
Vladimir
Здравствуйте,
Еще не готова ?
Доработка готова, обновление будет доступно в официальном релизе 2012.1, который запланирован на понедельник, 2 апреля.
Собственно вопрос: так ли это ? и можно это как-нибудь победить ?
Мы добавили новую опцию PassVariablesInUrl, при установке в True значения переменных, запрашиваемых у пользователя на панели переменных, будут дублироваться в URL запросе. Затем в PHP скрипте можно будет получить эти значения и подставить в SQL запрос.

Спасибо.