Scala Slick Escape用户输入字符串

时间:2019-05-27 12:41:34

标签: string scala escaping slick

我目前正在开发一项服务,客户可以在Web界面中输入自由文本。为避免XSS或类似攻击,应在后端转义文本。 Scala或Slick是否提供了类似于PHP的逃逸字符串的可能性?

到目前为止,我已经检查了 StackOverflow Scala Essential Book ,找到了可行的解决方案,到目前为止没有任何运气。 是否有Scala或Slick提供的本机解决方案可与PHP的mysql-escape-string媲美?

1 个答案:

答案 0 :(得分:2)

PHP的

函数mysqli-escape-string不能帮助您对 XSS 进行任何清理。目的是尝试转义可能导致 SQL注入的字符串。现在已弃用,不应再使用。 PHP中防止您的代码遭到 SQL注入的首选方法是使用 Prepared Statement with bind variables

也就是说,Slick和Scala都没有内置功能针对 XSS 进行字符串清理。

Slick有一个nice feature,它可以通过插值来更改要插入的所有字符串以绑定变量,这可以防止 SQL注入,但与防止 XSS < / em>(与 Prepared Statements 类似,但样板更少)。

为防止XSS,您应该使用一些库,该库允许对字符串进行清理,其中可能包含 XSS 。 OWASP的Java项目java-html-sanitizer可以做到这一点。您可以像这样使用它:

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>"