Не устраняйте уязвимости, исправляйте их.
Если у вас есть SQL-инъекция, это потому, что ваш уровень доступа к базе данных неверен. Внедрение стратегии смягчения последствий, такой как фильтрация параметров с помощью ключевых слов, таких как «SELECT» или «; DROP DATABASE '- неправильная вещь. Вместо этого перейдите к методу доступа к базе данных, который автоматически экранирует входящие параметры соответствующим образом для соответствующей базы данных. Тогда вы не только исправите проблему, но и убедитесь, что приложение работает правильно, когда сталкивается с «O'Reilly» или другими данными о проблеме.
Если у вас есть HTML-инъекция, ведущая к XSS, ваша шаблонная стратегия поощряет вас выводить неэкранированный текст вслепую. Не пытайтесь смягчить ситуацию, обнаруживая и отклоняя «<» в данных, вы пропустите некоторые поля и не будете знать обо всех особых случаях, не говоря уже о том, что у кого-то может быть веская причина для ввода «< ». Вместо этого исправьте это, изменив систему шаблонов или стиль так, чтобы каждый раз, когда вы выводите текст, вы всегда обходились без HTML как само собой разумеющееся, даже если данные «не могут» содержать специальные символы. </p>
Относительно того, какие проблемы безопасности вы можете игнорировать, это зависит от вашего бизнеса и от того, насколько клиенты полагаются на него. В целом, существует четыре уровня компромисса, влияющих на веб-приложения (о которых я предполагаю, что вы говорите, когда упоминаете инъекцию SQL и XSS):
Компрометация на уровне сервера. Обычно из-за плохо защищенных учетных записей оболочки и FTP, но также из-за обширных компромиссов на уровне приложений. Приложения, выполняющие system () с предоставленными пользователем данными, часто подвергаются такой серьезной угрозе, как и инъекции SQL, когда база данных представляет собой плохо сконфигурированный SQL Server (использующий xp_cmdshell). Злоумышленник может получить доступ к оболочке на сервере и может с удовольствием рассылать множество спама и попыток взлома на другие серверы. Это неприемлемо для любого бизнеса.
Компрометация на уровне приложения. Обычно SQL-инъекция. Атакующий может считывать или удалять любую информацию о клиентах из базы данных и иным образом мешать работе приложения. Это приемлемо, если это в значительной степени игрушечное приложение, и ваши клиенты примут умирание своих данных, или если доступ к приложению закрыт, доступен только для избранных доверенных лиц / клиентов.
Компрометация на уровне данных. Обычно HTML-инъекция в XSS. Злоумышленник может разместить на своем сайте iframe, указывающий на уязвимость в браузере, которая позволяет размещать вредоносное ПО на компьютерах людей, просматривающих страницу с устаревшим программным обеспечением. Это приемлемо, если вы не даете ни малейшего представления о безопасности своих клиентов или, опять же, если приложение закрыто для общего доступа.
Компромисс на уровне пользователя. Обычно непроверенные формы действий, приводящие к атакам между сайтами и запросами-подделками. Приемлемо, если ваше приложение вряд ли будет достаточно интересным для злоумышленников, чтобы попробовать его.
В целом индустрия в настоящее время находится где-то на уровне 3. Приложения, обеспечивающие атаки уровня 1, теперь редки; дыры уровня 2 встречаются чаще, но это проблемы, о которых большинство авторов знают и знают, что должны их исправить. Дырки 3-го уровня очень распространены, и тактика предотвращения всех возможных HTML-инъекций широко не соблюдается. Сегодня дыры 4-го уровня затрагивают, вероятно, большинство веб-приложений.