Инъекционные атаки имеют одну общую тему: входные данные преобразуются и интерпретируются как код, в какой-то момент времени из-за различных недостатков в приложении. Наиболее часто наблюдаемый недостаток заключается в том, что неанализованные данные неправильно кодируются или экранируются. Наличие или отсутствие только одной кодировки не защищает приложение от атак - символы, которые позволяют преобразовывать код в данные, должны быть закодированы, чтобы они не различались как код.
Теперь, с точки зрения JSF, разработчики тщательно продумали возможность защиты от определенных видов атак. Поскольку это структура уровня представления, защита от XSS-атак (и CSRF-атак, хотя и не связана с внедрением) присутствует. Механизмы защиты и их безопасное использование подробно рассматриваются на страницах структуры Seam по Межсайтовый скриптинг и Подделка межсайтовых запросов . Seam использует JSF, поэтому нет большой разницы в защите приложения JSF и приложения Seam от XSS и CSRF; большинство советов на этих страницах обязательно остаются в силе в приложении JSF.
Однако, если вам нужно защитить себя от других известных атак внедрения, особенно SQL-инъекции, вам нужно взглянуть на функции, предлагаемые вашей средой персистентности (при условии, что вы будете использовать одну из них). Если вы вручную пишете SQL-запросы и выполняете их непосредственно в своем коде, используйте объекты PreparedStatement, чтобы защитить себя от наиболее распространенных разновидностей SQL-инъекций. Если вы используете JPA, JDO и т. Д., Вам нужно внимательно следить за использованием таких платформ - большинство из них создают объекты PreparedStatement по умолчанию, когда к ним поступают запросы, поэтому часто не нужно беспокоиться.
Защита от атак SQL-инъекций в JPA
Именованные и собственные запросы будут внутренне преобразованы в подготовленный оператор, использующий параметризованные запросы. Это ответственность поставщика JPA. Нужно беспокоиться о SQL-запросах, которые создаются перед передачей поставщику. По сути, строки, передаваемые в EntityManager.createQuery () и EntityManager.createNativeQuery (), не должны иметь сцепленного пользовательского ввода.
PS : функция защиты от CSRF присутствует в JSF 2, а не в JSF 1.x. Он также присутствует только в определенных версиях Seam (начиная с 2.1.2).