我目前正在开发一项服务,客户可以在Web界面中输入自由文本。为避免XSS或类似攻击,应在后端转义文本。 Scala或Slick是否提供了类似于PHP的逃逸字符串的可能性?
到目前为止,我已经检查了 StackOverflow 和 Scala Essential Book ,找到了可行的解决方案,到目前为止没有任何运气。 是否有Scala或Slick提供的本机解决方案可与PHP的mysql-escape-string媲美?
答案 0 :(得分:2)
函数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>"