适当的验证用户输入是否足以阻止sql注入

时间:2015-09-02 11:16:43

标签: php sql security sql-injection

我知道如果我从user_name和password这样的用户那里获取输入,就可以完成sql注入。建议使用SQL预处理语句来防止sql注入但是如果我在进行sql操作之前正在用户正确验证输入怎么办呢。

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

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

abc@gmail.com; DROP ........(sql查询删除db,删除表等。)

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

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

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

1 个答案:

答案 0 :(得分:1)

不,因为你永远无法确定你已经过滤了正确的东西。

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

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

如果您在密码the homebrew website中禁用空格:

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

另外,如果我I'll just set my password to be

怎么办?
"' OR '1' = '1'--"@example.com

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