2009-03-17 3 views
7

Как относительный новичок как в Интернете, так и в MVC, я ищу хорошее резюме рекомендаций по безопасности, которые я должен реализовать.Защита сайта ASP.Net MVC

Сайт будет публичным лицом с «умеренно чувствительными данными» (что означает, что мы не можем получить иск, но, возможно, не получим много друзей, если данные выйдут!) И будут выполнены следующие меры безопасности: a: Аутентификация и авторизация форм/членства b: Параметрированные запросы для предотвращения внедрения SQL. c: Автоматический тайм-аут с x минутой бездействия c: SSL для шифрования от клиента к серверу

Что еще вы рекомендуете?

* Защита IIS и сети не подпадает под мой домен, поэтому меня больше интересует то, что мне нужно сделать для программного обеспечения.

+0

Отличный вопрос, особенно если вы используете простой ASP.NET. – Soviut

+0

Спасибо. Верьте или нет, большая часть моей деятельности в Интернете появилась около 10 лет назад с классическим asp. У меня есть много догоняющего! – Aaron

ответ

4
  • Если вы используете куки, чтобы распознавать пользователей, не забудьте использовать произвольный маркер (например, GUID) хранить на клиенте для идентификации. Я видел слишком много сайтов, которые хранят мой адрес электронной почты или имя пользователя в моем cookie ... просто нужно изменить его на другой!

  • Напишите свое программное обеспечение, чтобы оно могло работать под medium trust.

+0

1-й комментарий настолько очевиден и прост, что он блестящий! Никогда бы не подумал об этом за 100 лет :) Средняя определенность применяется, и я сделаю. Благодаря! – Aaron

+0

Не стесняйтесь повышать ответ, если найдете его полезным. Может быть, даже принять его, если он окажется лучшим. –

3

Если вы новичок в веб-разработке, вам следует знать о cross site scripting (XSS). Вы можете использовать вспомогательный метод Http.Encode для защиты от этого в ASP.NET MVC.

1
  1. Может быть, вы должны выбрать методы, которые могут быть Invoke извне или нет. Например, будьте осторожны, сделайте такой метод, как удаление любых таблиц, таких как http://yourhost.com/edit/deletealltable. Убедитесь, что вы хорошо разработали свой класс и методы. И предоставить атрибуты [NonAction] для предотвращения вызова общедоступного метода.

  2. Удостоверьтесь, что вы отображаете данные (особенно чувствительные) по мере необходимости с минимальной фантазией дизайна и используете клиентский скрипт столько, сколько необходимо.

  3. Удалите все неиспользуемые файлы мусора, такие как неиспользуемые файлы в папке с вашим решением.

  4. Проверяйте и дважды проверяйте и проверяйте любое управление вводом, например текстовое поле. Я просто могу дать что-то в текстовом поле, чтобы взломать вашу систему.
  5. Если вы используете микс между MVC и обычным ASP.NET, удалите любую зависимость между ними.
+0

Не могли бы вы объяснить удаление зависимости между mvc и регулярной веб-формой? Я не уверен, что вы имеете в виду. Благодаря! – Aaron

+0

, например, обычный aspx отобразит причудливые элементы управления, а затем получит данные из mvc http: // yourhost/customer/getall и сделает результат с помощью javascript. Это нормально, но у вас есть код обслуживания в обоих – nickotech2000

0

Обязательно тщательно изучите основы, независимо от ASP.NET. Убедитесь, что ваша СУБД имеет отдельный пользователь с минимальными необходимыми правами (например, CRUD и выполнение sprocs из указанных баз данных), настроенных для доступа к базе данных из веб-приложения.Параметризация запросов - отличная идея, но ВСЕГДА SCRUB YOUR INPUT ANYWAY: это не полная защита от SQL-инъекции.

Держите ваш дизайн в чистоте и легко понять. Документируйте все, что бы вы ни делали, особенно на стороне базы данных. Это было бы очень плохо, если бы вся ваша хорошая работа была уничтожена двумя программистами месяцами или годами позже - тот, кто не понимал, скажем, что пользователь базы данных для веб-приложения (теперь доступ к базе данных на другом сервере) не должны иметь привилегий root, а другой - добавить элемент управления, который не очищал вход правильно. Существует так много всего, что можно сделать по этому поводу, но проектирование для возможности того, что дураки будут поддерживать ваш код, - это не то, что кодеры будут думать, что вы милы, так что дураки не выведут вас бизнеса.

2

Удостоверьтесь, что вы предотвращаете нерабочие запросы. Убедитесь, что клиент аутентифицирован, прежде чем разрешить просматривать конфиденциальные данные или в некоторых случаях убедиться, что клиент прошел правильный канал, прежде чем разрешить манипулирование данными. Например, разрешить добавление товара в корзину, если запрос был указан на странице сведений о продукте. Если вы не проверите, кто-нибудь может побеседовать с действием. URL-адрес будет выглядеть как http://server/cart/add/XYZ123, и любой может просто настроить параметр «id».

+0

. Я немного смущен, чтобы спросить, что это легко ... но как мне получить имя запрашивающей страницы (чтобы обеспечить выход из правильного канала)? Это часть объекта запроса? Благодаря! – Aaron

+0

Вы можете использовать переменную cookie/session для идентификации объекта, с которым вы работаете. Тогда разрешите действие только для этого объекта. Вы «предыдущий» установили бы это, означая, что вы уже были там. –

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