Какие функции мне нужны, прежде чем я открою приложение ASP.Net в Интернете?

Какие шаги необходимо выполнить, прежде чем разрешить доступ к новому сайту, чтобы убедиться, что он безопасен и "готов к работе"?

Пока у меня есть следующее:

  • логирование ошибок (через ELMAH)
  • SSL включен, и у меня есть перенаправление с HTTP на HTTPS
  • <customErrors mode="RemoteOnly" />
  • Скомпилировано без отладки

Мой текущий технический стек — IIS7 и ASP.Net MVC3.

Я уверен, что забыл или не знаю о многих других вещах. Любой совет?


person Scott Weinstein    schedule 21.04.2011    source источник
comment
На самом деле я бы предпочел использовать ASP.NET Health Monitoring, поскольку он будет регистрировать все, что не было обнаружено, и он встроен.   -  person John Saunders    schedule 21.04.2011
comment
Я бы порекомендовал вам провести базовое нагрузочное тестирование в сравнении с тем, как, по вашему мнению, будет выглядеть ваш трафик, умножив на некоторый множитель.   -  person Merlyn Morgan-Graham    schedule 21.04.2011


Ответы (4)


  1. Защита от SQL-инъекций. Используйте хранимые процедуры ИЛИ параметризованные операторы sql. Вы можете использовать динамический sql, но будьте очень осторожны, и если вы это сделаете, убедитесь, что вы используете параметризованные запросы и не формируете «встроенные» операторы sql, добавляя переменные.

  2. Защитите себя от подделки межсайтовых запросов (CSRF), убедившись, что вы используете Html.AntiForgeryToken.

  3. Убедитесь, что трассировка отключена

  4. Убедитесь, что пользовательские ошибки включены, чтобы желтые экраны смерти (т. е. сведения об ошибках) не отображались для клиента.

  5. Защитите себя от межсайтового скриптинга, убедившись, что любые выходные данные, отображаемые в вашей системе из вашей модели, базы данных и т. д., закодированы с использованием синтаксиса ‹%: на ваших страницах aspx и просто @XXXX на ваших страницах mvc 3, так как mvc3 кодирует все BY DEFAULT, что является большим улучшением по сравнению с прошлыми методами.

  6. Убедитесь, что в вашей базе данных нет тестовых учетных записей.

  7. Убедитесь, что никакие действия не могут быть выполнены только с помощью строки запроса — например, передача /MyApp/DeleteUser/10. Требовать сообщения для выполнения действия, и эти сообщения должны использовать Html.AntiForgeryToken и [ValidateAntiForgeryToken] на вашем контроллере.

  8. Убедитесь, что любые пользователи, редактирующие информацию на вашей странице, не могут редактировать (используя такой инструмент, как fiddler) первичный ключ, скрытый на странице, тем самым изменяя редактируемую запись при отправке изменений. Например, вы можете хэшировать CustomerId на странице в скрытое поле и сравнивать его при публикации, чтобы убедиться, что он соответствует тому, что есть в модели.

  9. Приходи ко мне в tech ed в Атланте в следующем месяце, чтобы поговорить о безопасности :)

person Adam Tuliper - MSFT    schedule 21.04.2011

  1. Если вы используете ELMAH, убедитесь, что доступ к обработчику elmah.axd защищен и закрыт. В противном случае вы даете потенциальным хакерам ценную информацию.

  2. Убедитесь, что ваш веб-сервер полностью обновлен с исправлениями и автоматически загружает / устанавливает их, когда они доступны из MS. Слишком много сайтов не применяют их и получают pwn.

  3. Убедитесь, что на вашем сайте нет динамического sql; или, по крайней мере, все обрабатывается с помощью параметризованных запросов. В соответствии с этим убедитесь, что учетные данные пользователя базы данных заблокированы, чтобы у него были только те возможности, которые вам действительно нужны (подсказка: уровень dbo НЕ подходит).

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

person NotMe    schedule 21.04.2011

Первое, что приходит на ум, это поисковая оптимизация (SEO). Для начала используйте набор инструментов SEO от MS.

person Thomas Li    schedule 21.04.2011

В дополнение к вышесказанному я всегда запускаю бесплатный инструмент Xenu ( http://home.snafu.de/tilman/xenulink.html#Description ), чтобы проверить наличие неработающих ссылок. Даже если вы используете другой инструмент, это обеспечивает превосходную двойную проверку.

Рассмотрите возможность размещения файла web.config в каждой подпапке с соответствующими разрешениями. Например, если все изображения хранятся в папке \images, тогда эта папка не может обслуживать файл ASCX, а только файлы с правильным расширением изображения.

Делаете ли вы что-то удобное для пользователя, когда страница не найдена, например, перенаправляете пользователя на страницу поиска? Пользовательские страницы ошибок могут сделать сайт более удобным для использования.

Вы можете захотеть иметь файл robots.txt и собственный значок, которые часто упускают из виду.

person JonnyBoats    schedule 21.04.2011