我知道如果我从user_name和password这样的用户那里获取输入,就可以完成sql注入。建议使用SQL预处理语句来防止sql注入但是如果我在进行sql操作之前正在用户正确验证输入怎么办呢。
在用户名输入字段中,用户可以尝试按照以下方式注入
abc@gmail.com或'1'='1'
或
abc@gmail.com; DROP ........(sql查询删除db,删除表等。)
但如果我正在验证用户电子邮件,并且如果电子邮件不符合规则,则不会进行数据库交互。
像这样我也可以验证不能包含空格的密码。所以我的问题是如果我正在验证用户的每个输入,那么有人仍然可以在我的数据库中进行sql注入。
答案 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,这完全有效。)