我目前正在实现一个Vapor 4应用程序,它将用于管理机器。用户应该能够在中搜索机器名,我通过
.filter(Machine.path(for: \Machine.$name), .contains(inverse: false, .anywhere), term)其中term是用户提供的任意String。代码本身按照预期工作,但我想知道是否存在SQL注入漏洞(或其他攻击)的可能性。
我的问题:
是可能的SQL注入(或其他攻击),如果是,我如何防止它(请提供一个代码示例)?
发布于 2020-09-01 13:19:26
由于您使用的是Fluent,SQL注入是自动防止的,您是好的!
而不是像这样简单地构造一个查询:
SELECT * FROM machines WHERE name = '\(user_provided_name)'Fluent使用值绑定,这是数据库提供的将值传递到查询中的特性,以便将值转义,如果字符串包含SQL代码,则不会执行值绑定。看起来是这样的:
SELECT * FROM machines WHERE name = ?然后,通过查询将值传递给数据库服务器(在本例中为MySQL),在该查询中,它将使用所提供的值自动替换占位符(?)。
如果您需要,可以对您的查询进行快速评论,您可以导入FluentSQL模块,然后按如下方式编写查询:
.filter(\.$name ~~ term)如果你想保持现在的样子,那也没关系。
https://stackoverflow.com/questions/63634126
复制相似问题