2009-06-04 3 views
17

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

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

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

Edit: Начиная Баунти, как Любопытный, чтобы увидеть, если есть какие-либо больше мнений

+0

Отличный вопрос! +1 – Perpetualcoder

ответ

13

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

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

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

3

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

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

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

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

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

3

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

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

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

4

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

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

Ознакомьтесь с главой 13 «Безопасность и уязвимость» от Table of Contents для книги.

3

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

+0

Я думаю, что моя главная проблема с ASP.Net MVC - это люди, которые возились с почтовыми данными и URL-адресами, я все еще экспериментирую с тем, что конечный пользователь имеет доступ и что только что блокирует MVC. – Gavin

2

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

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

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

2

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

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

2

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

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

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

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

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

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

MVC включает в себя анти-поддельную поддержку токена, here's an excellent article on them. это помогает, но я до сих пор не полагаюсь на это.

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

1

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

ASP.NET MVC имеет несколько полезных функций для проверки ваших данных, особенно с v2. Вот Scott Gu's post about v2, который показывает, как сделать валидацию в действительно опрятном виде. Также обратите внимание, что вы можете легко реализовать свои собственные методы проверки таким же образом.

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

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

0

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

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