Шаги, чтобы стать опытным веб-безопасности - PullRequest
2 голосов
/ 10 ноября 2009

Я довольно давно кодирую на C++, Matlab и подобных языках для научных целей, но недавно я хотел заняться веб-программированием. Я учил себя HTML и CSS и баловался с Javascript, PHP и mySQL. Я действительно хотел бы начать создавать более продвинутые, управляемые пользователями веб-сайты (если это имеет смысл - в конечном итоге сайты, похожие на twitter и facebook по функциональности), но я беспокоюсь, что я не недостаточно осведомлен об интернет-безопасности и уязвимостях, чтобы быть уверенным, что принимаемые мною программные решения являются безопасными.

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

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

Ответы [ 7 ]

6 голосов
/ 10 ноября 2009

Другие представленные ответы предлагают хороший совет, но разбить его на систему правил:

  1. Будь параноиком

    1. Предположим, что ваши пользователи активно враждебны.
    2. Предположим, что ваш код не защищен.
    3. Проверка (на стороне клиента и на стороне сервера) всего:

      1. ... что ваши пользователи отправляют.
      2. ... которые вы храните в своей базе данных.
      3. ... что вы читаете из базы данных.
    4. Не позволяйте вашим пользователям видеть сообщения об ошибках, которые вы не создали. Если `verify_username () ожидает ровно два параметра`, не позволяйте вашим пользователям ever увидеть это сообщение об ошибке. Они не должны знать ни имена ваших функций, ни то, с чем они ожидают работать, выводить или не выполнять.
  2. Будь умным

    1. Ваш код, и мой, отстой; быть в курсе новых работ.
    2. Прочитайте вокруг предмета, даже те, которые вам кажутся скучными, и определенно тех, которые вам трудно понять.
    3. Предположим, что ваши пользователи умнее вас (те, которые активно враждебны, вероятно, более опытны, чем вы, когда вы взламываете свои блокировки).
    4. Пройдите проверку ошибок для всего, о чем вы можете подумать, а затем попросите ребенка примерно четырех лет нажать все и заполнить любые формы / поля, которые у вас могут быть. Если что-то сходит с ума (алфавитно-цифровое, а не целое число или что-то еще), добавьте условия ошибки, чтобы остановить это, открывая мир для вашего скрипта.
    5. Переместите все, что возможно, за пределы веб-корня, чтобы исключить возможность доступа пользователей к вашим сценариям с другого сайта или их компьютера.

Это может быть немного уныло или цинично, но даже с этими правилами я не думаю, что мы будем "в безопасности". Безопасность - одна из древнейших форм эскалационной войны; некоторые мы выигрываем, а некоторые проигрываем, но мы только когда-либо услышим о проигрышах И мы вряд ли когда-нибудь услышим обо всех этих.

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

2 голосов
/ 10 ноября 2009

Я бы сказал, чтобы начать с изучения SQL-инъекций , Межсайтовый скриптинг и Межсайтовая подделка запросов . Это должно дать вам представление о том, на что следует обращать внимание, и привести вас к правильному мышлению (никогда не верьте, что пользовательский ввод будет таким, каким вы думаете или каким он должен быть)

1 голос
/ 10 ноября 2009

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

1 голос
/ 10 ноября 2009

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

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

Есть несколько книг, посвященных вопросам безопасности PHP / MySQL, которые могут оказаться полезными.

1 голос
/ 10 ноября 2009
  1. Проверяйте все вводимые пользователем данные, никогда не используйте их дословно в других текстовых протоколах (SQL, HTML, XML, JS). Попробуйте придумать любой возможный способ сбить ваше программное обеспечение с помощью специально созданного ввода и предотвратить его.

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

Это в основном все.

1 голос
/ 10 ноября 2009

Проверьте написание безопасного кода Майклом Ховардом и Дэвидом Лебланком из Microsoft Press. Он содержит много полезной информации о безопасном кодировании в целом, а также одну или две главы, посвященные веб-программированию. Это книга Microsoft, но большинство идей переведено на любой язык, на котором вы работаете.

Ссылка на Amazon .

0 голосов
/ 10 ноября 2009

Проверка ввода (и вывода) очень важна, как указано выше, как и управление идентификацией. Но, безусловно, есть еще что-то для написания безопасного веб-приложения.

Начните с ознакомления с бесплатными инструментами и ресурсами на OWASP http://www.owasp.org и подпишитесь на их новостную ленту.

Пройдите базовое обучение по веб-безопасности: я рекомендую онлайновую программу Advanced Software Security в Стэнфордском университете. http://scpd.stanford.edu/computerSecurity/, хотя бы пройти курс Основы, если оно того стоит, если оно вам нужно.

Ознакомьтесь с учебными программами и другими ресурсами в Институте SANS http://www.sans.org,, включите их в список рассылки об уязвимости и другие списки рассылки. SANS предлагает курс по безопасному программированию на PHP http://www.sans.org/securitywest09/description.php?tid=2142.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...