正确验证用户输入是否不足以防止 sql 注入

Is proper validating user input not sufficient to prevent sql injection

我知道如果我从 user_name 和密码等用户那里获取输入,就可以完成 sql 注入。 SQL 建议使用准备好的语句来防止 sql 注入但是如果我在执行 sql 操作之前对用户的输入进行适当的验证怎么办..

在用户名输入字段中,用户可以尝试通过以下方式注入

abc@gmail.com 或 '1'='1'

abc@gmail.com; DROP ......(sql 查询删除数据库、删除表等)

但如果我正在验证用户电子邮件,并且如果电子邮件不符合规则,则不会进行任何数据库交互。

这样我也可以验证不能包含空格的密码

所以我的问题是,如果我验证用户的每个输入,那么有人仍然可以在我的数据库中进行 sql 注入。

不,因为您永远无法确定是否过滤了正确的内容。

此外,如果您不允许使用某些字符,您将严格限制应用程序的输入。

例如,假设 Whosebug 过滤掉了在其文本框中输入的 <script>

如果您不允许在密码中使用空格 I'll just set my password to be:

Robert');/**/DROP/**/TABLE/**/STUDENTS;--

此外,如果我的 email address was:

"' OR '1' = '1'--"@example.com

? (根据 RFC,这是完全有效的。)