当使用Sequelize时,我需要对用户输入进行消毒处理吗?

7
过去,我认为sequelize在某种程度上自动防止SQL注入,但当前版本的手册暗示存在需要进行净化的情况(link)。
抱歉如果这是一个愚蠢的问题,但我还没有找到任何明确的答案,是否在使用sequelize时需要进行净化。
谢谢。
2个回答

4

为了保障安全,您应该始终尝试对来自用户输入的任何数据进行消毒处理。但是,使用运算符会更加安全。在可能的情况下,请始终使用Sequelize.Op


如果我使用运算符,那么我需要对输入的哪一部分进行净化处理? - EKW
这更是一个关于净化的一般问题。文档和我的评论只是警告存在问题,并且没有完美的不可渗透系统。使用像Sequelize.Op这样的工具可以帮助减轻风险。例如,如果您让某人输入要搜索的短语。某人可以键入%' UNION SELECT password FROM Users where username LIKE '%。 如果您没有对其进行净化并且它进入原始查询如sequelize.query("SELECT x FROM y WHERE x like '%" + query + "%'", { type: models.sequelize.QueryTypes.SELECT}),则可能会出现问题。 - Michael McCabe

3
除了同意McCabe的答案外,我想补充一点,sequelize至少可以处理未转义的字符串,这可以说是处理SQL注入问题的重要部分。即使您想编写自定义查询,也可以使用替换方式实现,如此处第一句所述:"...replacements are escaped and inserted into the query by sequelize before the query is sent to the database..."。请注意,sequelize会在将查询发送到数据库之前对替换内容进行转义和插入。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接