栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何保护此功能免于SQL注入?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何保护此功能免于SQL注入?

对抗SQL注入的最常见建议是使用SQL查询参数(此线程上的许多人都建议使用此参数)。

在这种情况下,这是错误的答案。 您不能在DDL语句中为表名使用SQL查询参数。

SQL查询参数只能代替SQL表达式中的文字值使用。这在SQL的每个实现中都是标准的。

对于具有表名的情况,我建议防止SQL注入是针对已知表名的列表验证输入字符串。

您可以从中获取有效表名的列​​表

INFORMATION_SCHEMA

SELECt table_name FROM INFORMATION_SCHEMA.Tables WHERe table_type = 'base TABLE'  AND table_name = @tableName

现在,您可以将输入变量作为SQL参数传递给此查询。如果查询不返回任何行,则说明输入无效,不能用作表。如果查询返回一行,则表示该行已匹配,因此您可以确保可以安全使用它。

您还可以根据您定义的可以将应用程序截断的特定表的列表来验证表名,如@John
Buchanan所建议的那样

即使在验证了

tableName
RDBMS中作为表名存在的表名之后,我也建议对表名进行定界,以防万一您使用带空格或特殊字符的表名。在Microsoft
SQL Server中,默认标识符定界符为方括号:

string sqlStatement = string.Format("TRUNCATE TABLE [{0}]", tableName);

现在,只有

tableName
与实际表匹配时才有SQL注入的风险,并且实际上在表名中使用方括号!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415843.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号