我目前正在开发一项服务,客户可以在网络界面中输入自由文本。为了避免 XSS 或类似的攻击,应该在后端对文本进行转义。 Scala 或 Slick 是否提供类似于 PHP 的转义字符串的可能性?
到目前为止,我检查了 StackOverflow 和 Scala Essential Book 以获得可行的解决方案,但到目前为止还没有运气。 Scala 或 Slick 提供的原生解决方案是否可以与 PHP 的 mysql-escape-string 相媲美?
最佳答案
函数mysqli-escape-string来自 PHP 的代码无法帮助您针对 XSS 进行任何清理。它的目的是尝试转义字符串,这可能会导致 SQL 注入(inject)。它现已被弃用,不应再使用。 PHP 中防止代码遭受 SQL 注入(inject)的首选方法是使用预准备语句 with bind variables .
也就是说,Slick 和 Scala 都没有针对 XSS 进行字符串清理的内置函数。
Slick 有一个 nice feature ,这会更改您使用插值绑定(bind)变量插入的所有字符串,从而防止SQL注入(inject),但它与防止XSS无关(它类似于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>"
关于string - Scala Slick 转义用户输入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56326329/