Я столкнулся именно с такой ситуацией пару лет назад на веб-сайте электронной коммерции. Это было в ASP.NET 1.1 и было абсолютно ужасным с точки зрения качества кода и практики безопасности. Кроме того, мне сказали, что переписывание было совершенно исключено, и я не смог убедить их сдвинуться с места.
За 2 года мне удалось привести эту систему в соответствие с PCI-DSS. Это означает, что мы должны были закрыть все эти лазейки безопасности одну за другой и внедрить методы, чтобы избежать их повторения.
Первая проблема - вы должны найти все ошибки и недостатки безопасности. Вы можете использовать внешние инструменты обнаружения уязвимостей (я рекомендую QualysGuard ). Но ручное тестирование - единственный способ получить полное покрытие. Напишите старомодные тестовые сценарии для тестирования XSS, SQL-инъекций, CSRF и т. Д. И заручитесь поддержкой тестировщиков для выполнения этих сценариев. Если вы можете автоматизировать эти тесты, это стоит сделать. Но не избегайте освещения тестового примера только потому, что его слишком сложно автоматизировать. Если вы можете позволить себе консультантов по безопасности, попросите их помочь вам охватить охват тестированием и написать тестовые примеры.
Это даст вам:
а) список ошибок / недостатков
б) повторяемый способ проверить, действительно ли вы исправили каждый из них
Затем вы можете начать рефакторинг и исправить каждый недостаток.
Процесс, которому я следовал:
Шаг 1: рефакторинг, шаг 2: тестирование и выпуск, шаг 3: вернуться к шагу 1.
То есть Существует непрерывный цикл исправления, тестирования и выпуска. Я бы порекомендовал вам совершать регулярные развертывания в своих производственных системах, например ежемесячно и втисните в каждый цикл выпуска столько «рефакторингов», сколько сможете.
Я обнаружил, что автоматизированные средства безопасности практически бесполезны из-за:
а) они могут дать вам ложное чувство безопасности
б) они могут дать вам так много ложных срабатываний, что вы отправляетесь по бессмысленным касательным вместо того, чтобы работать с реальными угрозами безопасности.
Вам действительно нужно разобраться с характером каждой уязвимости безопасности и точно понять, как она работает. Хороший способ сделать это - исследовать каждый недостаток (например, начать с топ-10 OWASP) и написать документ, который вы могли бы дать любому разработчику в вашей команде, который объяснил бы им, какой именно недостаток вы пытаетесь защитить. против и почему. Я думаю, что слишком часто мы обращаемся к инструментам, чтобы помочь исправить недостатки безопасности, думая, что мы можем избежать усилий по-настоящему понять каждую угрозу. Вообще говоря, инструменты полезны только для повышения производительности - вам все равно нужно взять на себя ответственность и запустить шоу.
Ресурсы:
1) Читайте OWASP top 10 .
2) Спецификация PCI-DSS также очень полезна и помогает вам целостно думать о безопасности - то есть охватывает не только веб-приложения, но и базы данных, процессы, брандмауэр, разделение DMZ / LAN и т. Д. Даже если оно закончилось топ для ваших требований, его стоит посмотреть.