我在工作中查看了一些编码标准,然后发现了这一点:
string query = "SELECT * FROM USERS WHERE USER_ID='" + userIdFromWebPage + "'";
userIdFromWebPage 是一个包含未经验证的不受信任数据的变量。
假设它包含下列内容之一:
- “' 或 1=1 -”
- “';删除表用户-”
- “';exec xp_cmdshell(''格式 c:')-”
最终的查询可能看起来像这样。
string query = "select * FROM USERS WHERE USER_ID='';exec xp_cmdshell('format c:') -";
这会导致数据库服务器上的 c:\ 驱动器格式化。
这是真的吗?
答案1
真正的问题是can that code be used for SQL Injection?
,答案绝对是肯定的。破坏者格式化您的驱动器以制造混乱的日子已经一去不复返了,如今的攻击是由那些对经济利益感兴趣的人发起的,他们通常会使用 SQL 注入向量将您的主机添加到他们的僵尸网络中,有时是为了窃取您可能拥有的信息,有时是为了劫持您的数据并索要赎金(加密并要求赔偿解密费用)。所以他们不太可能发布format c:
。
可以xp_cmdshell
用于发出类似format c:
? 的命令,默认情况下不是,自从 SQL 2005 以来,引擎xp_cmdshell
默认禁用管理员必须明确启用它。但如果是启用后,可以使用吗?是的。操作系统会格式化 c: 驱动器吗?不太可能。目前没有操作系统接受系统卷的格式。
但最终的重点是你的代码应该不允许 SQL 注入。