|
1
10
只要您实际使用的是prepared语句的参数替换特性(可能会误用它们,而不使用该特性),并且前提是您使用的prepared语句库中没有bug,那么您应该可以抵抗原始SQL注入。但这并不意味着你不应该对用户给你的任何东西抱有怀疑。:-) |
|
2
4
准备好的语句不包括查询标识符和运算符的非数据部分。
由于可能的选项数量有限,所有变量标识符都应该根据用户输入从预先编写的变量中选择。操作员也一样。
|
|
|
3
3
你 不是唯一使用实现的人。使用同一个实现的人越多,意味着发现和消除bug的机会就越大——如果你使用自己的实现,那么只有你才能找到并修复bug。 |
|
|
4
2
尽管准备好的语句有助于防范SQL注入,但也有可能通过不适当地使用准备好的语句而受到SQL注入攻击。
|
|
|
5
2
简短回答:是的,如果使用得当。 然而,这并不意味着JDBC驱动程序中就不会有bug,从而为SQL注入打开了大门。当我为我工作的一家公司调查这个问题时,我发现在我们使用的一个JDBC驱动程序(PostgreSQL)中确实存在SQL注入错误。这是几年前的事了,这个错误被修复了。 虽然我不记得细节,但我记得我看过JDBC实现的源代码,看到它是用字符串连接实现的。 不过,我希望这种情况很少发生,我的建议是信任实现并正确使用PreparedStatements。 |