Hacksplaining — Учитесь через взлом


Hacksplaining — это недавно созданный веб-сайт, который поощряет взлом с целью изучения и защиты от него. Каждый в бизнесе веб-разработки знает, что создание безопасного веб-сайта, насколько это возможно, сложно. Это крайне важная задача, которая должна быть интегрирована на этапах строительства объекта, а не применяться впоследствии.

Hacksplaining

С точки зрения безопасности, веб-разработчик слишком многому должен следовать, имея дело с терминами и сокращениями, такими как SQL Injection, XSS, CSRF и т. Д., Которые скорее сбивают с толку, чем помогают сохранить фокус.

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

hacksplaining.com — еще одна попытка обучить веб-разработчиков вопросам безопасности, но использует альтернативный подход; научитесь защищать себя, взломав себя. Его визуально привлекательный контент и интерактивный способ вовлечения пользователя в процесс обучения предлагают надежный ответ на препятствия, с которыми сталкиваются современные разработчики в своих попытках добиться осознания безопасности.

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

К уязвимостям прикреплены метаданные, то есть они классифицируются по серьезности их распространенности, возможности использования и воздействия (если эксплуатируются). Например, SQL Injection классифицируется как уязвимость, которая возникает время от времени, но легко эксплуатируется и оказывает разрушительное воздействие при успешной эксплуатации.

Диапазон уязвимостей охватывает диапазон от внедрения SQL до XSS и его подразделов (постоянный, на основе DOM, отраженный), CSRF, незашифрованные коммуникации и т. Д., Что дает полное представление о том, что необходимо знать.

Но это не все. После того, как вы завершите каждый пример и, таким образом, испытаете способы обнаружения и использования уязвимости, вам будут представлены текстовые инструкции по превентивным мерам, которые следует использовать для снижения этого риска. Руководства поддерживаются примерами кода на популярных языках, таких как Ruby, PHP, C # и т. Д.

Например, после завершения примера внедрения SQL-кода нам рекомендуется:

использовать параметризованные операторы, как

Языки программирования взаимодействуют с базами данных SQL с помощью драйверов баз данных. Драйвер позволяет приложению создавать и запускать операторы SQL для базы данных, извлекая и манипулируя данными по мере необходимости. Параметризованные операторы обеспечивают безопасную обработку параметров (т. Е. Входных данных), передаваемых в операторы SQL.

будь осторожен, что

Однако использование ORM не делает вас автоматически невосприимчивым к SQL-инъекциям »или« Как общее практическое правило: если вы обнаружите, что пишете операторы SQL путем объединения строк, очень тщательно подумайте о том, что вы делаете.

Экранирование входов, когда

вы не можете использовать параметризованные операторы или библиотеку, которая пишет за вас SQL, следующий лучший подход — обеспечить правильное экранирование специальных строковых символов во входных параметрах

Дезинфекция входов, как

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

с дополнительными соображениями

Принцип наименьших привилегий, хеширования паролей и сторонней аутентификации

Примеры кода (в данном случае на Python), которые следуют ниже, иллюстрируют хорошие и плохие практики:

хорошо

# SQL и параметр отправляются отдельно # драйверу базы данных.

cursor.execute («выберите user_id, user_name from users where email =?», email)

для строки в cursor.fetchall ():

печать row.user_id, row.user_name

Плохо

# Конкатенация строк уязвима.

cursor.execute («выберите user_id, user_name from users where email = ‘% s'»% email)

для строки в cursor.fetchall ():

печать row.user_id, row.user_name

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


Добавить комментарий