Я не думаю, что вы можете легко сделать тесты для такого рода вещи. Это потребует, чтобы ваше приложение было написано таким образом, чтобы насмехаться над его составными частями и, безусловно, вовлекать в себя много непрерывной ручной работы (убедитесь, что есть тесты и макеты для всего, тестирование бесчисленных вкусов атак и т. Д. И т. Д.).
Единственная вещь в том, что если вы можете получить какой-то автоматизированный инструмент широкого масштаба, который всегда обновляется, тот, кто его дал вам, не взимал достаточно денег.
Формы защиты от таких атак довольно хорошо известны и легко использовать:
- Всегда escape variables in sql, или еще лучше использовать prepared statements
- Если вы не необходимости принимать и сохранять ввод HTML , всегда
htmlspecialchars
любая переменная, которая входит в HTML (обратите внимание, что существует много форматов, таких как BBCode, MarkDown, Textile и т. д., единственная цель которых - разрешить полезное подмножество параметров форматирования без открытия окна Pandora)
- Если вы абсолютно, безусловно, нужно принимать, хранить и обслуживать данные HTML, то есть HTMLPurifier, что может помочь - но делать это только в крайнем случае
Поэтому, я бы сказал, что это гораздо лучшее значение для вашего времени, чтобы убедиться, что вы следуете этим практикам/используйте эти инструменты.
Кроме того, если вы производите доступ к этим двум подсистемам (sql и HTML output) через четко определенную часть вашего приложения (методы доступа к базам данных, которые выходят из всех входных данных независимо от того, что выводит выходные данные HTML таким же образом вывести входные переменные и ввести их в предоставленный «HTML-шаблон», который вы впоследствии эхо), тогда становится проще провести тестирование этих подсистем. Достойные фреймворки PHP уже делают это.
На данный момент единственная реальная вероятность внедрения уязвимости - это обход или неправильное использование этих подсистем. На мой взгляд, вам лучше тратить усилия на определение и соблюдение хороших правил кодирования, которые пишут модульные тесты для предотвращения уязвимостей в вашей бизнес-логике (модульные тесты для вашего кода санитарии, конечно же, совсем другое).
Наконец, есть automatedSQLinjectiontools и XSS-relatedtools, которые вы можете использовать, чтобы исследовать веб-приложений. Но если кто-то не нанимает вас на тестирование, лучше использовать их, поскольку вы будете использовать защиту в сексе: используйте его, но не рассчитывайте на это.
Не уверен, является ли это случай для модульного тестирования на всех ... Заинтересованы, чтобы увидеть, что ответы приходят вверх. –
У меня возникает соблазн ответить: «Напишите сценарий, ищущий» (SELECT | INSERT | UPDATE). * \ $ \ W +. * ", Если он присутствует, ваш код не удался.' – cwallenpoole
Согласен, речь идет не об модульном тестировании, а о том, что ваш код использует только подготовленные-заявления. Используйте систему PDO, а затем привяжите переменные через эту систему. – cwallenpoole