2010-03-17 5 views
0

Я разрабатываю приложение ASP.NET, которое взаимодействует с Google Maps и извлекает информацию о маркере из базы данных. Информация о маркере разбивается на таблицы в базе данных, где имя таблицы отражает компанию (например, CompanyA_MarkerData, CompanyB_MarkerData и т. Д.). Чтобы периодически обновлять карту новыми маркерными данными, я использую setTimeout в JavaScript для регулярного вызова моей функции JavaScript UpdateMarkers. «UpdateMarkers» делает вызов веб-службы, которая выполняет запрос базы данных, и возвращает список маркеров обратно на JavaScript, который, в свою очередь, обновляет карту.Насколько безопасен мой код ASP.NET?

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

Чтобы избежать этой проблемы, я реструктурирую свою программу следующим образом: когда системный администратор создает пользователей для моего приложения, они также могут назначить идентификатор компании этому пользователю. Идентификатор компании хранится с использованием объекта Profile в ASP.NET. Я перемещаю код веб-службы в класс с общими функциями, чтобы их можно было вызывать только на моих страницах (но не кем бы то ни было, например, с помощью веб-служб). Функции будут по-прежнему требовать передачи имени компании. Однако, вместо того, чтобы JavaScript напрямую обращался к этим общим функциям, JavaScript будет вызывать набор методов страниц (которые, как я понимаю, не являются общедоступными, как веб-службы). Затем эти методы страницы будут использовать объект «Профиль» для получения имени компании, прикрепленного к пользователю, который в настоящее время входит в систему, а затем совершают вызов моих общих функций базы данных и возвращают информацию обратно на JavaScript.

Я думаю, что этот второй метод более безопасен, чем первый, потому что я не разрешаю клиенту передавать разные параметры моему коду и извлекать несанкционированные данные. Код на стороне сервера выдает параметры, которые необходимо отправить. Тем не менее, мне интересно, есть ли лучший способ сделать это, которого я пропускаю?

Благодаря

--Amr

+0

Просто понял, что методы страницы должны быть объявлены как общие в VB, и я не могу получить доступ к объекту Profile из общей функции. Это немного порождает гаечный ключ в работе ... –

ответ

1

Все, что вам нужно, это метод проверки на стороне сервера пользователю разрешено ли получить доступ к данным для этой компании.

Я предполагаю, что вы используете AJAX, так как вы говорите, что извлекаете информацию из своей собственной базы данных с помощью Javascript. Итак, какой бы серверный сценарий/программа вы не вызывали, введите код аутентификации пользователя.

+0

Спасибо - я не знал, что могу получить доступ к объекту Membership из веб-службы, но, оказывается, я могу. Это путь. –

Смежные вопросы