Как предотвратить повторные атаки? - PullRequest
16 голосов
/ 04 сентября 2008

Это связано с другим вопросом, который я задал . Таким образом, у меня есть особый случай URL, когда при отправке формы на него я не могу полагаться на куки для аутентификации или для поддержки сеанса пользователя, но мне как-то нужно знать, кто они, и мне нужно чтобы знать, что они вошли в систему!

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

Главный недостаток безопасности, который я вижу, это повторные атаки. Как я могу помешать кому-то завладеть этой зашифрованной строкой и выполнить POSTing от имени этого пользователя? Я знаю, что могу использовать SSL, чтобы усложнить кражу этой строки, и, возможно, я могу регулярно поворачивать ключ шифрования, чтобы ограничить время, в течение которого строка подходит, но мне бы очень хотелось найти пуленепробиваемую решение. У кого-нибудь есть идеи? Предотвращает ли ASP.Net ViewState воспроизведение? Если да, то как они это делают?

Редактировать : Я надеюсь на решение, которое не требует ничего, хранящегося в базе данных. Состояние приложения будет нормальным, за исключением того, что оно не выдержит перезапуска IIS или вообще не будет работать в сценарии веб-фермы или сада. Сейчас я принимаю ответ Криса, потому что я не уверен, что это возможно сделать без базы данных. Но если кто-то придет с ответом, который не касается базы данных, я приму его!

Ответы [ 12 ]

0 голосов
/ 04 сентября 2008

Это веб-формы или MVC? Если это MVC, вы можете использовать токен AntiForgery. Это похоже на подход, о котором вы упоминали, за исключением того, что он использует в основном GUID и устанавливает cookie со значением guid для этого поста. Подробнее об этом см. Блог Стива Сандерсона: http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

Другое дело, вы рассматривали возможность проверки реферала на обратной передаче? Это не пуленепробиваемый, но это может помочь.

0 голосов
/ 04 сентября 2008

Если вы принимаете каждый ключ только один раз (скажем, сделаете ключ GUID, а затем проверьте, когда он вернется), это предотвратит повторы. Конечно, если злоумышленник ответит сначала , то у вас возникнет новая проблема ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...