Пожалуй, можно определить два подхода к тестированию безопасности приложения — чёрный и белый ящики. Разница между ними заключается в точке зрения на объект тестирования. Белый ящик предполагает, что вы знаете, что находится внутри объекта, то есть, у вас есть доступ к исходникам приложения. Чёрный же предлагает вам обращаться к объекту, как будто бы вы не в курсе, что там находится внутри, по сути, вы тестируете публичные интерфейсы.
От выбранного подхода можно выбрать инструменты для тестирования. Для чёрного ящика используются довольно универсальные программы, которые долбят сайт на наличие известных уязвимостей по списку. Их предположительно можно найти по запросу web security scanner. Для белого используются методы статического анализа. Насчёт PHP не знаю, но для Ruby есть brakeman, который пробегается по коду и ищет потенциально уязвимые места. Это в качестве примера.
Можно всё тестировать и изучать вручную — это качественнее с одной стороны, но предъявляет больше требований как по времени, так и по квалификации.