Я не думаю, что вы можете легко провести модульные тесты для такого рода вещей. Это потребовало бы, чтобы ваше приложение было написано так, чтобы оно имитировало его составные части и определенно включало в себя большую часть непрерывной ручной работы (проверка наличия тестов и макетов для всего, тестирование для множества разновидностей атак и т. Д. И т. Д.).
Единственная определенная вещь - это то, что если вы можете получить какой-то автоматизированный инструмент широкого спектра, который всегда актуален, тот, кто дал его вам, не брал достаточно.
Формы защиты от таких атак довольно хорошо известны и просты в использовании:
- Всегда экранирующие переменные в sql или, что еще лучше, использовать подготовленные операторы
- Если вам не требуется для принятия и сохранения ввода HTML, всегда
htmlspecialchars
любая переменная, входящая в HTML (обратите внимание, что существует множество форматов, таких как BBCode , MarkDown , Текстиль и т. Д., Единственной целью которых является предоставление полезного подмножества параметров форматирования, не открывая ящик Пандоры)
- Если вы абсолютно, безусловно, нуждаетесь в , чтобы принимать, хранить и обслуживать данные HTML, тогда есть HTMLPurifier , который может помочь - но сделать это только в крайнем случае
Поэтому я бы сказал, что гораздо лучше потратить время, чтобы убедиться, что вы следуете этим методам / используете эти инструменты.
Более того, если вы направите весь доступ к этим двум подсистемам (вывод SQL и HTML) через четко определенную часть вашего приложения (методы доступа к базе данных, которые избегают любого ввода, независимо от того, какие функции вывода HTML аналогичным образом экранируются входные переменные и вставьте их в предоставленный «HTML-шаблон», который вы впоследствии отобразите), тогда становится легко выполнить модульное тестирование этих подсистем. Достойные PHP-фреймворки уже делают это.
На данный момент единственным реальным шансом на внедрение уязвимости является обход или неправильное использование этих подсистем. На мой взгляд, вам лучше не тратить усилия на указание и следование хорошим методам кодирования, а написание модульных тестов для предотвращения уязвимостей в вашей бизнес-логике (модульные тесты для вашего кода дезинфекции, конечно, совсем другое дело).
Наконец, есть автоматизированные SQL инъекции инструменты и XSS-связанные инструменты , который можно использовать для проверки веб-приложений. Но если кто-то не нанимает вас проводить тестирование на проникновение, лучше использовать его, как если бы вы использовали защиту в сексе: используйте это, но не рассчитывайте на это.