是否可以使用xp_cmdshell格式化硬盘?

我正在通过我的工作中的一些编码标准,我碰到这个:

string query = "SELECT * FROM USERS WHERE USER_ID='" + userIdFromWebPage + "'"; 

userIdFromWebPage是一个包含未validation的不可信数据的variables。

想象一下,它包含以下内容之一:

  • “'或1 = 1 – ”
  • “'; DROP TABLE用户 – ”
  • “'; exec xp_cmdshell(''format c:') – ”

最后的查询可能看起来像这样。

 string query = "select * FROM USERS WHERE USER_ID='';exec xp_cmdshell('format c:') -"; 

这将导致数据库服务器上c:\驱动器的格式。

这是真的吗?

真正的问题是can that code be used for SQL Injection? 答案绝对是的。 为了传播破坏而破坏驱动器的破坏者日子早已不复存在,现在这些攻击是由对经济利益感兴趣的个人发起的,他们通常会使用SQL注入向量来将您的主机添加到他们的僵尸networking中,有时会窃取信息您可能有时会将您的数据扣为人质并索要赎金(对其进行encryption并要求赔偿解密费用)。 所以他们不会发布format c:

可以使用xp_cmdshell来发出format c:的命令吗? 默认情况下,从SQL 2005开始,引擎默认禁用xp_cmdshell ,pipe理员必须明确地启用它。 但是如果启用了,可以使用吗? 是。 操作系统会格式化c:驱动器吗? 不太可能。 今天没有操作系统接受系统卷的格式。

但最终的重点是你的代码不应该允许SQL注入