В настоящее время я разрабатываю сервис, в котором клиенты могут вводить произвольный текст в веб-интерфейсе. Чтобы избежать XSS или подобных атак, текст должен быть экранирован в бэкенде. Предлагают ли Scala или Slick аналогичную PHP возможность экранирования строк?
До сих пор я проверял Переполнение стека и Основная книга по Scala на наличие рабочего решения, но пока безуспешно. Есть ли собственное решение, предоставляемое Scala или Slick, сравнимое с PHP mysql-escape-строка?
Функция mysqli-escape-строка из PHP не поможет вам выполнить какую-либо очистку от XSS. Это было сделано для того, чтобы попытаться экранировать строки, которые могли вызвать SQL-инъекция. Теперь он устарел и больше не должен использоваться. В PHP предпочтительным способом защиты вашего кода от SQL-инъекция является использование Подготовленное заявлениес переменными связывания.
Тем не менее, ни Slick, ни Scala не имеют встроенных функций, выполняющих очистку строк от XSS.
У Slick есть хорошая особенность, который изменяет все строки, которые вы вставляете, используя интерполяцию для связывания переменных, что предотвращает SQL-инъекция, но не имеет ничего общего с предотвращением XSS (это что-то похожее на Подготовленные отчеты, но с меньшим количеством шаблонов).
Чтобы предотвратить XSS, вы должны использовать некоторую библиотеку, которая позволяет очищать строки, которые потенциально могут содержать XSS. Есть Java-проект java-html-дезинфицирующее средство от OWASP, который делает это. Вы можете использовать его как:
object HtmlSanitizer {
//First define your policy for allowed elements
private lazy val policy = new HtmlPolicyBuilder()
.allowElements("p")
.allowElements("a")
.allowUrlProtocols("https")
.allowAttributes("href").onElements("a")
.requireRelNofollowOnLinks()
.toFactory()
def sanitize(unsafeHTML: String) = policy.sanitize(unsafeHTML)
}
а потом:
HtmlSanitizer.sanitize("<p><svg/onload=alert('XSS')</p>") // "<p></p>"
Спасибо за ответ. java-html-sanitizer выглядит хорошо, я посмотрю на это!