Как тестировать phpunit для инъекций xss + sql? - PullRequest
10 голосов
/ 14 марта 2011

Как проверить с помощью phpunit php web application для инъекций xss + sql? Я думаю найти программу, которая выводит xss + другие атаки для проверки моих форм приложений. Эта программа / служба должны постоянно обновляться новыми xss и другими новыми атаками. Существует ли такая услуга / программа, если не так, как сегодня? Пожалуйста, приведите несколько примеров, если можете.

(я использую php 5.3 + Zend Framework + MySQL)


Редактировать:

Я спрашиваю о тестировании! И не мешают приемам, которые я тоже знаю.

Спасибо

Йосеф

Ответы [ 5 ]

9 голосов
/ 14 марта 2011

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

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

Формы защиты от таких атак довольно хорошо известны и просты в использовании:

  • Всегда экранирующие переменные в sql или, что еще лучше, использовать подготовленные операторы
  • Если вам не требуется для принятия и сохранения ввода HTML, всегда htmlspecialchars любая переменная, входящая в HTML (обратите внимание, что существует множество форматов, таких как BBCode , MarkDown , Текстиль и т. Д., Единственной целью которых является предоставление полезного подмножества параметров форматирования, не открывая ящик Пандоры)
  • Если вы абсолютно, безусловно, нуждаетесь в , чтобы принимать, хранить и обслуживать данные HTML, тогда есть HTMLPurifier , который может помочь - но сделать это только в крайнем случае

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

Более того, если вы направите весь доступ к этим двум подсистемам (вывод SQL и HTML) через четко определенную часть вашего приложения (методы доступа к базе данных, которые избегают любого ввода, независимо от того, какие функции вывода HTML аналогичным образом экранируются входные переменные и вставьте их в предоставленный «HTML-шаблон», который вы впоследствии отобразите), тогда становится легко выполнить модульное тестирование этих подсистем. Достойные PHP-фреймворки уже делают это.

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

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

6 голосов
/ 18 марта 2011

Я бы не писал модульные тесты для обнаружения инъекций XSS или SQL. Что бы я сделал, это:

Чтобы предотвратить XSS, экранируйте все пользовательские данные одним из:

Чтобы предотвратить SQL-инъекцию, используйте PDO и заполнители для всего. т.е.)

"SELECT * FROM users WHERE uid = $_POST['id']"; 

становится

"SELECT * FROM users WHERE uid = ?"; 

или

"SELECT * FROM users WHERE uid = :id"; 

Редактировать Вы также можете попробовать некоторые дополнения браузера, такие как:
https://addons.mozilla.org/en-US/firefox/addon/hackbar/
https://addons.mozilla.org/en-US/firefox/addon/xss-me/
https://addons.mozilla.org/en-US/firefox/addon/sql-inject-me/
https://addons.mozilla.org/en-US/firefox/addon/access-me/

5 голосов
/ 18 марта 2011

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

Модульное тестирование поможет вам с логическими ошибками, но не поможет вам найти такие проблемы с безопасностью. Единственными решениями являются бдительность и проверка / аудит кода.

ОБНОВЛЕНИЕ: Я почти забыл! Вам следует проверить PHP_CodeSniffer для выполнения автоматического аудита вашего кода. Это должно помочь вам обнаружить, по крайней мере, некоторые случаев, когда люди делают потенциально опасные и небезопасные вещи в коде, и вы можете расширить его, чтобы обнаружить больше проблем, чем при базовой установке по умолчанию.

2 голосов
/ 23 марта 2011

Используйте фреймворки, такие как sqlmap

1 голос
/ 23 марта 2011

Получите надстройку XSS Me для Firefox и запустите ее для проверки на своих страницах.

...