2009-07-22 3 views
7

Я ищу набор руководящих принципов или контрольный список, который вы можете использовать для защиты общедоступного веб-сайта ASP.NET MVC. Я просто хочу удостовериться, что я не делаю никаких очевидных и известных проблем при развертывании веб-сайта.Защита ASP.NET MVC Application Checklist

Спасибо.

ответ

5
  1. Как всегда, убедитесь, что вы надлежащий вывод кодирования - уведомление, что я здесь говорил закодировать и не HTMLEncode. Если вы выводите содержимое в HTML, то вы хотите, чтобы использовал Html.Encode - однако если вы , выводящий на JavaScript, то вы хотите использовать функцию кодирования JavaScript . - Это поможет вам в борьбе с Cross Site Scripting (XSS)
  2. Используйте помощники, которые помогают атаковать CSRF там, где это необходимо (или, возможно, просто повсюду)
  3. В зависимости от того, как вы получаете доступ к хранилищу данных, если это база данных SQL, помните, что защитите себя от SQL-инъекций, либо через параметризованные запросы, хранимые процедуры, LINQ или что у вас есть.
  4. Когда вы протестируете - убедитесь, что ваши тестовые данные содержат изворотливый результат (материал, в котором невозможно вызвать Html.Encode, легко обнаруживается, возможно, через <script type="text/javascript">alert("XSS attack!");</script>XSS here!, то же самое происходит с тем, что вводится в JavaScript, появляются ошибки!)
  5. Когда привязка к модели использует белый список для свойств, поэтому пользователи не могут создавать свойства связывания связующего, которые не предназначены для привязки!
+1

Мне нравится пункт 4. Я не думаю, что люди делают это, полагаясь на тестеров, чтобы выполнять те виды тестов. – griegs

+0

Хе-хе тоже, как ни странно, это то, что мне пришло в голову, когда мне приходилось думать о том, какой совет я бы давал другим - теперь я вижу, что мне нужно немного подумать над этим. – kastermester

+0

Да, я смотрю на все эти комментарии, думая, что мне нужно сделать то же самое. :) – griegs

1

Я делаю следующее:

  1. Отделяйте мои заботы. Администратор в администратора папки и т.д.
  2. [Авторизоваться] на все действия, которые требуют, чтобы вы вошли в систему.
  3. Html.Encode все поля ввода данных.
  4. ActionResult Создать ([Bind (префикс = "", Exclude = "идентификатор")] MyModel newModelObject) < == исключить идентификаторы, которые могут быть использованы в нападении

Кроме этого ...

1

Ниже приведены общие меры ASP.NET

  1. Set Debug = ложь в web.config
  2. Включите пользовательские ошибки
  3. шифровать печенье
  4. проверяет входные
  5. Включить проверку запроса
  6. Кодировать выходные данные
1

Не используйте по умолчанию GET о действиях, если это абсолютно необходимо.Например, если у вас есть DeleteUser действие, которое не имеет в [AcceptVerbs(HttpVerbs.Post)] на него, он может быть вызван с помощью

<img src="http://yoursite/admin/DeleteUser/1" /> 

Какой будет вызван кем бы «мнения» изображения.

+0

IMO Если хакер может ввести ярлык img на страницу, ему может быть непросто вставить JS, который будет делать сообщение на URL-адрес удаления. Как вы думаете? – Ramesh

+0

Да, вот почему вы следуете советам @ griegs и [Авторизовать] чувствительные вещи тоже :). [Авторизовать] самостоятельно не будет работать, поскольку пользователь может войти в систему (для большинства приложений), не просматривая страницу. – swilliams

+0

Хм, я получил его, разоблачение запроса GET может привести к перекрестному домену XSRF через домен. – Ramesh

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