13 ответов:
Я отправляю в OWASP Top 2007 сокращенный список здесь, так что люди не должны смотреть на другую ссылку и в случае, если источник идет вниз.
межсайтовые Скрипты (XSS)
- недостатки XSS возникают всякий раз, когда приложение принимает данные, предоставленные пользователем, и отправляет их в веб-браузер без предварительной проверки или кодирования этого контента. XSS позволяет злоумышленникам выполнять скрипт в браузере жертвы, который может захватить пользовательские сессии, портить веб-сайты, возможно, вводить червей и т. д.
Недостатки Инъекций
- недостатки инъекции, особенно инъекции SQL, являются общими в веб-приложениях. Инъекция происходит, когда предоставленные пользователем данные отправляются интерпретатору как часть команды или запроса. Враждебные данные злоумышленника заставляют интерпретатор выполнять непреднамеренные команды или изменять данные.
Вредоносный Файл Исполнение
- код уязвим для удаленного включения файлов (RFI) позволяет злоумышленникам включать враждебный код и данные, что приводит к разрушительным атакам, таким как полный компромисс сервера. Вредоносные атаки на выполнение файлов влияют на PHP, XML и любую структуру, которая принимает имена файлов или файлы от пользователей.
Небезопасная Прямая Ссылка На Объект
- прямая ссылка на объект возникает, когда разработчик предоставляет ссылку на внутренний объект реализации, такой как файл, каталог, запись базы данных или ключ, в качестве параметра URL или формы. Злоумышленники могут манипулировать этими ссылками для доступа к другим объектам без авторизации.
подделка межсайтового запроса (CSRF)
- атака CSRF заставляет браузер жертвы, вошедший в систему, отправлять предварительно аутентифицированный запрос уязвимому веб-приложению, которое затем заставляет браузер жертвы выполнять враждебное действие благо злоумышленник. CSRF может быть столь же мощным, как и веб-приложение, которое он атакует.
утечка информации и неправильная обработка ошибок
- приложения могут непреднамеренно пропускать информацию о своей конфигурации, внутренней работе или нарушать конфиденциальность из-за различных проблем с приложениями. Злоумышленники используют эту слабость для кражи конфиденциальных данных или проведения более серьезных атак.
сломанный Аутентификация и управление сеансами
- учетные данные и токены сеанса часто не защищены должным образом. Злоумышленники компрометируют пароли, ключи или маркеры проверки подлинности, чтобы присвоить себе удостоверения других пользователей.
Небезопасное Криптографическое Хранилище
- веб-приложения редко используют криптографические функции должным образом для защиты данных и учетных данных. Злоумышленники используют слабо защищенные данные для проведения идентификации кражи и другие преступления, такие как мошенничество с кредитными картами.
Небезопасных Коммуникаций
- приложения часто не могут шифровать сетевой трафик, когда это необходимо для защиты конфиденциальных сообщений.
не удалось ограничить доступ к URL
- часто приложение защищает только конфиденциальные функции, предотвращая отображение ссылок или URL-адресов для несанкционированных пользователей. Злоумышленники могут использовать эту слабость для доступа и выполнения несанкционированных операций путем прямого доступа к этим URL-адресам.
Проект Безопасности Открытого Веб-Приложения
Адам
все будут говорить "SQL-инъекция", потому что это самая страшная уязвимость и самая простая, чтобы получить вашу голову вокруг. Межсайтовый сценарий (XSS) будет на втором месте, потому что его также легко понять. "Плохая проверка ввода" - это не уязвимость, а скорее оценка наилучшей практики безопасности.
давайте попробуем это с другой точки зрения. Вот функции, которые при реализации в веб-приложении, скорее всего, испортят вас вверх:
динамический SQL (к примеру, пользовательского интерфейса запросов строителей). К настоящему времени вы, вероятно, знаете, что единственным надежным безопасным способом использования SQL в веб-приложении является использование параметризованных запросов, где вы явно привязываете каждый параметр в запросе к переменной. Места, где я вижу веб-приложения, чаще всего нарушают это правило, когда вредоносный ввод не является очевидным параметром (например, именем), а скорее атрибутом запроса. Очевидным примером является запрос iTunes-like "Smart Playlist" строители, которые вы видите на сайтах поиска, где такие вещи, как операторы where-clause, передаются непосредственно в серверную часть. Еще одна отличная скала, которую нужно перевернуть, - это сортировка столбцов таблицы, где вы увидите такие вещи, как DESC, выставленные в параметрах HTTP.
загрузить файл. Загрузка файлов запутывает людей, потому что пути к файлам подозрительно похожи на пути к URL-адресам, и потому что веб-серверы упрощают реализацию части "загрузка", просто направляя URL-адреса в каталоги в файловой системе. 7 из 10 обработчики загрузки, которые мы тестируем, позволяют злоумышленникам получить доступ к произвольным файлам на сервере, потому что разработчики приложений предположили, что к вызову файловой системы "open()" применяются те же разрешения, что и к запросам.
хранение паролей. Если ваше приложение может отправить мне мой необработанный пароль, когда я его потеряю, вы потерпите неудачу. Существует один безопасный надежный ответ для хранения паролей, которая осуществляется, если вы используете PHP, вы, вероятно, хотите PHPpass.
генерация случайных чисел. Классическая атака на веб-приложения: сброс пароля другого пользователя, и, поскольку приложение использует функцию "rand()" системы, которая не является крипто-сильной, пароль предсказуем. Это также применимо в любом месте, где вы делаете криптографию. Что, кстати, вы не должны делать: если вы полагаетесь на криптографию в любом месте, вы, скорее всего, уязвимы.
динамический вывод. Люди слишком сильно верят во вклад утверждение. Ваши шансы на очистку пользовательских входов всех возможных метасимволов, особенно в реальном мире, где метасимволы являются необходимыми частями пользовательского ввода, низки. Гораздо лучший подход - иметь согласованный режим фильтрации выходных данных базы данных и преобразования их в HTML-объекты, такие как quot, gt и lt. Rails сделает это за вас автоматически.
электронная почта. Множество приложений реализуют некоторые возможности исходящей почты, которые позволяют злоумышленник должен либо создать анонимную учетную запись, либо вообще не использовать учетную запись для отправки электронной почты, контролируемой злоумышленником, на произвольные адреса электронной почты.
помимо этих функций, Ошибка #1, которую вы, вероятно, сделаете в своем приложении, - это где-то предоставить идентификатор строки базы данных, чтобы пользователь X мог видеть данные для пользователя Y, просто изменив число с "5" на "6".
bool UserCredentialsOK(User user) { if (user.Name == "modesty") return false; else // perform other checks }
SQL ИНЪЕКЦИИ АТАК. Их легко избежать, но все слишком общее.
никогда когда-либо когда-либо когда-либо (я упоминал, что "когда-нибудь"?) доверяйте пользовательской информации, передаваемой вам из элементов формы. Если ваши данные не проверены перед передачей в другие логические уровни вашего приложения, вы можете также дать ключи от вашего сайта незнакомцу на улице.
вы не упоминаете, на какой платформе вы находитесь, но если на ASP.NET начните с хорошего старого Скотта Гатри и его статьи "Совет / трюк: защитите от атак SQL-инъекций".
после этого вам нужно рассмотреть, какой тип данных вы разрешите пользователям отправлять в и в конечном итоге из вашей базы данных. Если вы разрешаете вставлять HTML, а затем представлять его позже, вы широко открыты для атак межсайтовых сценариев (известных как XSS).
Это те два, которые приходят мне на ум, но у нашего собственного Джеффа Этвуда была хорошая статья в Жуть Кодирования обзор книга "19 смертных грехов безопасности программного обеспечения".
большинство людей здесь упоминали SQL Injection и XSS, что вид правильно, но не обманывайте себя - самые важные вещи, о которых вам нужно беспокоиться как веб-разработчику, - это проверка ввода, из которой происходят XSS и SQL-инъекции.
проверить и дважды проверьте все входные данные, особенно если они будут в конечном итоге в SQL-запросе. Я предлагаю построить функцию escaper и обернуть ее вокруг всего, что входит в запрос. Например:
$query = "SELECT field1, field2 FROM table1 WHERE field1 = '" . myescapefunc($userinput) . "'";аналогично, если вы собираетесь отображать любую введенную пользователем информацию на веб-странице, убедитесь, что вы удалили все теги
Это также короткая небольшая презентация по безопасности одним из основных разработчиков wordpress.
Он охватывает все основные проблемы безопасности в веб-приложениях.
наиболее распространенными являются, вероятно, атаки на инъекции баз данных и атаки межсайтовых сценариев; в основном потому, что их легче всего выполнить (это, вероятно, потому, что это те, о которых программисты ленивы).
вы можете видеть даже на этом сайте, что самые вредные вещи, которые вы будете искать, включают инъекцию кода в ваше приложение, поэтому XSS (Межсайтовый сценарий) и SQL-инъекция (предложения@Patrick) - ваши самые большие проблемы. В основном вы захотите убедиться, что если ваше приложение позволяет пользователю вводить какой-либо код, он регулируется и тестируется, чтобы убедиться, что передаются только те вещи, которые вы уверены, что хотите разрешить (html-ссылка, изображение и т. д.), И ничего больше выполняемый.
использование хранимых процедур и / или параметризованных запросов будет иметь большое значение для защиты от внедрения sql. Также сделайте не у вашего веб-приложения есть доступ к базе данных как sa или dbo - установите стандартную учетную запись пользователя и установите разрешения.
как для XSS (межсайтовый скрипт) ASP.NET имеет некоторые встроенные защиты. Лучше всего фильтровать входные данные с помощью элементов управления проверки и регулярных выражений.
Я не эксперт, но из того, что я узнал до сих пор золотое правило-не доверять никаким пользовательским данным (GET, POST, COOKIE). Общие типы атак и как спасти себя:
- SQL Injection Attack: используйте подготовленные запросы
- Межсайтовые Скрипты: не отправлять пользовательские данные в браузер без фильтрации / экранирования в первую очередь. Это также включает в себя пользовательские данные, хранящиеся в базе данных, которые первоначально поступили от пользователей.
Comments