Строки ввода пользователя Scala Slick Escape

В настоящее время я разрабатываю сервис, в котором клиенты могут вводить произвольный текст в веб-интерфейсе. Чтобы избежать XSS или подобных атак, текст должен быть экранирован в бэкенде. Предлагают ли Scala или Slick аналогичную PHP возможность экранирования строк?

До сих пор я проверял Переполнение стека и Основная книга по Scala на наличие рабочего решения, но пока безуспешно. Есть ли собственное решение, предоставляемое Scala или Slick, сравнимое с PHP mysql-escape-строка?

В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
2
0
766
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функция 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 выглядит хорошо, я посмотрю на это!

Friso 27.05.2019 15:44

Другие вопросы по теме