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

Обсуждение Stimulsoft Reports.PHP
Ответить
kuzmin@academic.ru
Сообщения: 4
Зарегистрирован: 02 янв 2012, 22:47
Откуда: Moscow

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

Сообщение kuzmin@academic.ru »

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

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

М.б. есть какие-то более простые решения?
Аватара пользователя
Vladimir
Сообщения: 415
Зарегистрирован: 06 авг 2008, 09:48
Откуда: Earth

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

Сообщение Vladimir »

Здравствуйте,

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

Спасибо.
kuzmin@academic.ru
Сообщения: 4
Зарегистрирован: 02 янв 2012, 22:47
Откуда: Moscow

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

Сообщение kuzmin@academic.ru »

Доброе время суток. Как дела с доработкой по данной проблеме? IMHO, запросы, конечно нужно хранить на сервере, а из отчета просто посылать какой-либо идентификатор (хеш)
Аватара пользователя
Vladimir
Сообщения: 415
Зарегистрирован: 06 авг 2008, 09:48
Откуда: Earth

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

Сообщение Vladimir »

Здравствуйте,

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

Спасибо.
evg
Сообщения: 1
Зарегистрирован: 28 мар 2012, 17:42

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

Сообщение 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, которая будет доступна в марте.
Еще не готова ?

Аватара пользователя
Vladimir
Сообщения: 415
Зарегистрирован: 06 авг 2008, 09:48
Откуда: Earth

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

Сообщение Vladimir »

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

Спасибо.
Ответить