我正在调查SQL注入攻击问题(本例中为SQL Server数据库)。在任何人提出建议之前,我知道参数化查询是最终的解决方案,但这在遗留代码中并不容易或直接,所以请耐心等待。
难题是这个(格式错误的)命令“批处理”实际上有效:
select * from table1 where tableCode LIKE '' delete from table1
现在我对SQL Server文档的理解是,这不是一个合法的命令批处理,因为没有分号分隔符,所以严格来说它应该被SQL Server拒绝。但它不是,并且两个命令正确执行,具有预期的结果。
这是一个SQL Server不符合自己的文档,还是我错过了什么?
答案 0 :(得分:2)
这是一个非常有效的SQL Server SQL语句。所有当前版本中的分号都是可选的。 MSDN文档声明最佳实践是使用分号来结束SQL语句,因为可选的很快将被弃用。分号是ANSI SQL-92标准的一部分,但从未在Transact-中使用SQL。