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