Scala Slick Escape Пользовательские строки ввода - PullRequest
1 голос
/ 27 мая 2019

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

До сих пор я проверял StackOverflow и Scala Essential Book на работающее решение, но пока безуспешно. Есть ли собственное решение, предоставляемое Scala или Slick, сравнимое с PHP mysql-escape-string ?

1 Ответ

2 голосов
/ 27 мая 2019

Функция mysqli-escape-string из PHP не поможет вам выполнить дезинфекцию против XSS . Он был предназначен для попытки экранирования строк, которые могли вызвать SQL-инъекцию . Теперь он устарел и больше не должен использоваться. В PHP предпочтительным способом защиты вашего кода от SQL-инъекций является использование подготовленного оператора с переменными связывания .

Тем не менее, ни Slick, ни Scala не имеют встроенных функций, выполняющих санацию строк против XSS .

Slick имеет приятную особенность , которая изменяет все вставляемые строки, используя интерполяцию для привязки переменных, что предотвращает SQL-инъекцию , но не имеет ничего общего с предотвращением XSS (это что-то похожее на Подготовленные заявления , но с меньшим количеством шаблонов).

Чтобы предотвратить XSS, вы должны использовать некоторую библиотеку, которая позволяет проводить очистку строк, которая может содержать XSS . Есть проект Java java-html-sanitizer от 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>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...