Как избежать доступности строки запроса в динамически генерируемой диаграмме ASP.Net? - PullRequest
0 голосов
/ 12 октября 2009

Для создания динамических диаграмм и графиков в ASP.Net я поместил код (GDI +) для каждой диаграммы в отдельные файлы страниц - так, чтобы выводить сам запуск страницы диаграммы, если просто отображать диаграмму на экране.

Страница диаграммы содержит код для получения соответствующих данных из SQL Server, а также код генерации диаграммы. Созданный объект диаграммы затем сохраняется в Response.OutputStream.

Страница содержимого, на которой я хочу отобразить диаграмму, предоставляет различные параметры для определения того, какие данные будут использоваться для создания диаграммы (например, идентификатор пользователя, идентификатор проекта, выбор из раскрывающихся списков и т. Д.). Чтобы отобразить диаграмму как часть страницы содержимого, я затем помещаю на страницу объект изображения, собираю различные параметры диаграммы и в коде позади устанавливаю URL объекта изображения, который будет страницей диаграммы, плюс все добавленные параметры диаграммы. к строке запроса.

Это работает нормально, за исключением одного: когда я щелкаю правой кнопкой мыши изображение диаграммы, как оно отображается на странице содержимого в браузере, я получаю опцию «открыть изображение», которое отображает страницу с диаграммой в сам (возможно, не удивительно, так как он генерируется со страницей диаграммы). Однако проблема заключается в том, что на этой странице диаграммы отображается полный URL-адрес со строкой запроса, что означает, что пользователь может изменить значения в строке запроса и, таким образом, сгенерировать новую диаграмму. Это большая проблема, поскольку это может позволить пользователю создать диаграмму для данных, к которым у него не должно быть доступа.

Есть ли способ избежать этой проблемы, все еще используя этот подход «страницы графика» для генерации и отображения динамических диаграмм? В качестве альтернативы, лучше ли мне сохранять динамически сгенерированные изображения в виде файлов, например, на диске или в виде объектов потока файлов SQL Server, а затем ссылаться на них на странице?

Кстати, мне известны различные доступные элементы управления диаграммой ASP.Net. Однако диаграммы, которые мне нужно сгенерировать, сильно адаптированы для очень специализированного приложения, поэтому, к сожалению, эти элементы управления не будут работать в этом случае.

Ответы [ 2 ]

0 голосов
/ 21 октября 2009

Прежде всего, я предполагаю, что ваши пользователи аутентифицированы (авторизованы) на вашем сайте, так что вы знаете, кто они и к каким данным / диаграммам они должны иметь доступ?

Вам необходимо проверить входящие параметры в вашем коде генерации изображения, чтобы увидеть, имеет ли текущий пользователь доступ к данным, которые он запрашивает. Как правило, вы запрашиваете ваши пользовательские / привилегированные таблицы для этого (или вызываете API членства или что-то еще).

Попытка скрыть URL-адрес (например, выполнить POST вместо GET для страницы, генерирующей изображение) - это просто «безопасность по незаметности», что не очень хорошая идея.

Кстати, ваша проблема называется «фальсификация URL», поиск в Google должен помочь вам в правильном направлении.

0 голосов
/ 12 октября 2009

У меня такая же забота об одном из моих предыдущих проектов. Одно дешевое, но не на 100% надежное решение - вставить проверку http-referer перед обработкой изображения. Изображения, загруженные с вашей страницы, будут иметь URL-адрес вашего домена.

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

Другой способ - добавить какие-то параметры контрольной суммы в строку запроса. Только вы знаете, как «расшифровать» и генерировать изображение только тогда, когда контрольная сумма «правильная».

...