Подтвердить что ты не робот

Проблемы безопасности при работе с новыми технологиями

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

Я работаю с ASP.Net Web Forms уже около 5 лет и довольно уверен, что мой код по крайней мере достаточно безопасен, чтобы остановить большинство известных атак. Оглядываясь назад на мой ранний код, я неосознанно оставил пробелы во многих областях безопасности, особенно в строках запросов и в представлении, но со временем я узнал, что такое уязвимости, и убедился, что я не повторю те же ошибки.

Однако я недавно начал новый проект в ASP.Net MVC, и я действительно не знаю, какие дыры в безопасности я оставляю открытым. Эта причина сама по себе не дает мне уйти с этим. Я читаю об этом, как сумасшедший, но я уверен, что я недостаточно узнал, чтобы сделать его настолько безопасным, насколько я мог, с помощью Web Forms. Что вы делаете, чтобы убедиться, что вы не оставляете себя открытым для атаки?

Изменить: Запуск Bounty как любопытный, чтобы узнать, есть ли какие-либо мнения

4b9b3361

Ответ 1

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

  1. Помните следующее: существует три типа уязвимостей. Единицы, которые уникальны для используемой структуры (например, проблемы с открытым контроллером Ruby on Rails), уникальные для типа создаваемого приложения (например, веб-приложения должны беспокоиться о XSS) и те, которые уникальны для вашего приложения в частности.
  2. Определите, как новая технология, которую вы используете, снижает уязвимости безопасности типа приложения. Например, как ASP.Net MVC смягчает XSS? Как это смягчает SQL-инъекцию? Если в документации нет ответа, выясните, как вы собираетесь решать эти общие классы уязвимостей. Кроме того, сделайте паузу, потому что, если структура не смягчает эти проблемы, возможно, разработчики фреймворков не определили приоритетность безопасности и, возможно, не создали очень надежную структуру.
  3. Укажите, почему вам нужна безопасность и что вы пытаетесь защитить. Например: запрашивает ли ваше приложение авторизацию перед просмотром конфиденциальных данных? Если да, определите, какие функции предоставляет инфраструктура для авторизации.
  4. Найдите раздел безопасности в документации. Часто известные проблемы документируются, но люди так сильно сосредотачиваются на решении своей проблемы, что они не ищут ее.
  5. Защитите код и узнайте, как используется пользовательский ввод. Будьте щедры в определении того, что вводится пользователем. Например, поля запроса или сообщения являются очевидными, но во многих инфраструктурах MVC URL-адрес определяет, какой код работает (например, см. Уязвимость Ruby Routes). Будьте очень осведомлены о том, как обрабатываются данные.
  6. Стресс проверить вашу бизнес-логику и выяснить, как ее можно было бы злоупотреблять.

Итак, кратко: аккуратно обращайтесь с пользователем, читайте существующую документацию, определяйте, какую безопасность вы требуете, и выясните, как среда смягчает общие классы уязвимостей. Осознавая, что безопасность является приоритетом, а внимание - 50% борьбы.

Ответ 2

Я думаю, что многое из того, что вы узнали в ASP.NET, можно передать в ASP.NET MVC. Он по-прежнему использует HTML (использует: XSS) через HTTP (использует: все входные файлы [cookie, URL-параметры, ввод формы, заголовки] могут быть подделаны, захват сеанса, CSRF) с задней частью базы данных (использует: SQL-инъекцию).

Я бы порекомендовал книгу Стив Сандерсона в ASP.NET MVC под названием Pro ASP.NET MVC Framework. В нем есть целая глава, посвященная этим темам.

Ознакомьтесь с главой 13 "Безопасность и уязвимость" в Содержание для книги.

Ответ 3

все время.
Чем больше вы узнаете, тем больше вы сможете предотвратить дыры в безопасности в будущем.

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

Я думаю, что вы на правильном пути со своим мышлением, помните, что никто не прав в первый раз (по крайней мере, я не знаю), почему рефакторинг настолько крут.

не позволяйте этому удержать вас от изучения чего-то нового, просто сделайте все возможное, прочитайте об угрозах безопасности для своих технологий и пойдите. (попробуйте http://www.securityfocus.com)

Обзоры экспертов могут помочь в этом, и есть инструменты, которые могут облегчить поиск дыр в безопасности.

Ответ 4

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

Сделайте немного исследований и найдите любую OSS, построенную на той же технологии. Игра с ним может показать много вещей.

EDIT: ASP.NET MVC OSS?? Посмотрите на nerddinner.com исходный код и поиграйте с ним. Авторы являются на высшем уровне и я предполагаю, что они должны были подумать о безопасности при создании этого!

Ответ 5

Технологии, которые вы используете, могут измениться, но основные проблемы безопасности этого не делают. Во всяком случае, я ожидал бы меньше дыр в области безопасности в коде, который использует более новые библиотеки, потому что они разработаны с учетом общих атак. Например, SQL-инъекция просто не происходит с классами VS2008, генерируемыми через DBML.

Ответ 6

Совет специально для ASP.NET MVC:

В ваших представлениях используйте методы HtmlHelper как можно больше (например, Html.BeginForm, Html.TextBox, Html.ActionLink и т.д.) по сравнению с необработанными тегами HTML. Помощники автоматически кодируют значения, которые вы передаете в него, уменьшая вероятность создания уязвимости XSS.

Для всех других входных данных, которые вы воспроизводите в своем представлении, всегда используйте Html.Encode.

Ответ 7

Опять же, специфичный для ASP.NET MVC, действительно наблюдайте за использованием привязки модели. Вы всегда должны явно указывать свойства, которые будут связаны.

Несоблюдение этого может привести к неожиданным побочным эффектам (как я узнал..!) и может позволить кому-то злонамеренно изменять свойства модели.

Ответ 8

Много MVC - это то же самое, что и WebForms - они оба сидят на Asp.net, поскольку @GuyIncognito уже сказал, что большинство из них одно и то же.

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

Только это не так, его можно взломать, viewstate отнимает массу места, и он никогда не может быть полностью отключен. Я считаю, что наилучшая практика с WebForms никогда не будет предполагать, что postback определенно находится на обслуживаемой странице и снова проверяет безопасность.

С возвратом MVC относятся разные действия с моделями и привязками к модели, инкапсулирующими содержимое в объекты, защищенные типом. Проверки еще нужно сделать, так как подмена обратной почты теперь намного проще. Итак:

  • Никогда не предполагайте, что модель принадлежит определенному источнику.
  • Предположим, что модель может быть повреждена и не полагаться на нее.
  • Относитесь к действиям контроллера MVC, как к WebMethod или к вызовам службы - попытка взлома может вызвать любой из них в любом порядке с любыми параметрами.

Все это лучше всего подходит для WebForms, так как теперь просто попробуйте этот тип взлома в MVC.

В MVC включена поддержка токена подделки, вот отличная статья о них. это помогает, но я до сих пор не полагаюсь на это.

Все остальное (кодировать все созданные пользователем выходные данные, параметризовать все входные данные Sql и т.д.) - это то же самое.

Ответ 9

Просто, никогда не доверяйте никому, что приходит в ваше приложение:) Некоторые люди уже сделали несколько замечательных сообщений о том, что вы можете легко подделать любые сообщения в инфраструктуру, но это ни в коем случае не должно отличаться от webforms может быть сделано.

ASP.NET MVC имеет несколько полезных функций для проверки ваших данных, особенно с v2. Здесь Сообщение Скотта о v2, в котором показано, как сделать валидацию действительно опрятным способом. Также обратите внимание, что вы можете легко реализовать свои собственные методы проверки таким же образом.

Авторизация также та же, вы можете украсить свой контроллер или действие атрибутом Authorize и указать, каким ролям разрешен доступ к нему. Это использует платформу проверки подлинности .NET, как и веб-формы, поэтому вы также можете реализовать свою собственную безопасность.

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

Ответ 10

Одно простое решение: предположим, что в вашем приложении есть дыры в области безопасности, и подключите их вне вашего приложения. Например, запретите доступ (через IIS) к "небезопасным" URLS с ограничениями SSL и/или IP.