我正在通过我的工作中的一些编码标准,我碰到这个:
string query = "SELECT * FROM USERS WHERE USER_ID='" + userIdFromWebPage + "'";
userIdFromWebPage是一个包含未validation的不可信数据的variables。
想象一下,它包含以下内容之一:
最后的查询可能看起来像这样。
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注入 。