Вопросы безопасности для веб-приложения ASP.Net, которое будет использоваться на общедоступном компьютере или в киоске - PullRequest
4 голосов
/ 03 августа 2010

У меня есть приложение, которое можно использовать без проверки подлинности на компьютерах в общественных местах.Это простое четырехстраничное приложение, которое позволяет пользователям подавать заявку на получение лицензии на брак.В некоторых офисах будет общедоступный компьютерный киоск, где кандидаты могут заполнить свою собственную информацию, прежде чем обращаться к клерку.Они также могут сделать это дома перед посещением офиса.Какие соображения я должен принять, чтобы убедиться, что пользователь не может получить доступ к данным предыдущего пользователя?Некоторые данные формы будут содержать конфиденциальную информацию, такую ​​как DOB, SSN и девичья фамилия матери.

1.Отключить автозаполнение

Пока что я установил autocomplete = false в своем теге формы главной страницы.

<form id="frmMain" runat="server" autocomplete="false">

2.Отключить кэширование страниц

Я также смог отключить кэширование страниц в IE и FF, но не смог сделать это в Safari и Chrome.Кто-нибудь знает хитрость?Нажатие кнопки «Назад» по-прежнему отображает заполненные формы данных в Safari и Chrome.

// Disables page-caching in IE
Response.Cache.SetAllowResponseInBrowserHistory(false);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Expires = 0;

// HACK: fixes Firefoxes cache issue
Response.AddHeader("ETag", new Random().Next(1111111, 9999999).ToString());

3.Управление сеансом

Я также внедрил таймер на каждой странице, который завершит сеанс через n минут.Сеанс содержит идентификатор текущего приложения, с помощью которого страницы загружают ранее введенные данные.Они могут получить больше времени, нажав кнопку.Когда таймер включен, он перенаправляет обратно на главную страницу, где я прекращаю сеанс в Page_Load.Я также перенаправляю на эту страницу, когда пользователи нажимают кнопку «Готово / Отправить».После завершения сеанса переход на страницы по URL никогда не загрузит предыдущее приложение.Он будет считаться новым.

protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack)
     Session.Abandon();
}

4.что еще мне делать?

Your awesome suggestions/tips here

Ответы [ 4 ]

1 голос
/ 03 августа 2010

Поскольку это приложение Kiosk, вам нужно убедиться, что браузер настроен на обработку запросов на отсутствие кэширования.

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

Возможно, вы также захотите добавить прерыватели кнопок javascript на некоторых страницах (например, на некотором конце страницы сеанса) и средство навигации по истории, но не на все страницы, потому что никому не нравится, когда кнопка «Назад» будет сломана.

0 голосов
/ 13 апреля 2012

Используйте JavaScript.Вам нужно будет зафиксировать и предотвратить событие submit каждой формы, захватить данные, отправить их через ajax, а затем использовать собственный метод reset() формы.Оттуда вы можете перейти в другое место или показать ошибки проверки в зависимости от результата AJAX.С jQuery это просто.

0 голосов
/ 03 августа 2010

Я думаю, у вас правильная идея. Убивать сеанс на «финише / отправке» я бы рекомендовал. Тем не менее, прочитайте список owasp top 10 и помните о своих обычных уязвимостях.

1) Убедитесь, что вы используете HTTPS.

2) Всегда всегда проверяйте ваше приложение на наличие уязвимостей перед его развертыванием. Я рекомендую использовать Wapiti (бесплатно), Acunetix ($) или NTOSpider ($$$$).

3) Обновляйте свой сервер, убедитесь, что вы запускаете OpenVAS , чтобы убедиться, что ваш сервер защищен.

0 голосов
...