如何解决如何在Vapor 4Fluent 4中使用用户搜索词防止SQL注入
我目前正在实施Vapor 4应用程序,该应用程序将用于管理计算机。 用户应该能够搜索计算机名,这是我完成的
.filter(Machine.path(for: \Machine.$name),.contains(inverse: false,.anywhere),term)
其中term
是用户提供的任意String
。
代码本身按预期工作,但是我想知道是否存在SQL注入漏洞(或其他攻击)的可能性。
我的问题:
是否可以进行SQL注入(或其他攻击),如果可以,如何防止(请提供代码示例)?
解决方法
由于您使用的是Fluent,因此会自动阻止SQL注入,您一切顺利!
不是像这样简单地构造查询:
SELECT * FROM machines WHERE name = '\(user_provided_name)'
Fluent使用值绑定,这是数据库提供的功能,用于将值传递到查询中,以便在字符串包含SQL代码的情况下对值进行转义并不会执行。看起来像这样:
SELECT * FROM machines WHERE name = ?
然后将值与查询一起传递到数据库服务器(在本例中为MySQL),在该服务器中,它将自动用提供的值替换占位符(?
)。
如果需要,可以对查询进行快速注释,可以导入FluentSQL
模块,然后像这样编写查询:
.filter(\.$name ~~ term)
如果您希望现在就离开它,那也很好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。