Почему ASP.NET принимает внешне созданные идентификаторы сеанса? - PullRequest
5 голосов
/ 24 августа 2009

У меня есть веб-сайт ASP.NET 3.5 с использованием стандартного поставщика членства SQL.

Приложение должно пройти IBM Rational AppScan, прежде чем мы сможем приступить к работе.

Я получаю сообщение об ошибке:
Серьезность: высокая
Тип теста: Приложение
Уязвимый URL: http://mytestserver/myapp/login.aspx
Задачи исправления: Не принимать внешне созданные идентификаторы сеанса

Что я могу сделать, чтобы это исправить?

Я использую поставщика членства SQL. Это связано? Я использую стандартные элементы управления входом тоже. У меня функция «Запомнить меня» отключена и скрыта.

Спасибо.

Ответы [ 3 ]

8 голосов
/ 02 сентября 2009

Это не уязвимость (и мне действительно не нравится AppScan из-за его ложных срабатываний - количество раз, когда мне приходилось объяснять, что файлы cookie CSRF не нужно связывать с сеансом в моем маленьком проекте с открытым исходным кодом, надоедает).

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

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

Но при аутентификации по формам детали аутентификации не сохраняются в сеансе, поэтому фиксация вообще не является проблемой.

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

2 голосов
/ 24 августа 2009

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

Попробуйте установить уникальный путь к cookie:

<forms name="YourAppName"
       path="/FormsAuth" ... />

http://msdn.microsoft.com/en-us/library/ms998310.aspx#paght000012_additionalconsiderations

Подробнее ... http://msdn.microsoft.com/en-us/library/ms998258.aspx

0 голосов
/ 02 сентября 2009

Казалось бы, RegenerateExpiredSessionId свойство контролирует это. Сделайте для него значение true. Также сохраняйте тайм-аут до минимального значения, максимально допустимого для пользователей (например, 10-15 минут).

...