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

c# – 如何保护此功能免于SQL注入?,第1张

概述public static bool TruncateTable(string dbAlias, string tableName){ string sqlStatement = string.Format("TRUNCATE TABLE {0}", tableName); return ExecuteNonQuery(dbAlias, sqlStatement) > 0;}
public static bool Truncatetable(string dbAlias,string tablename){    string sqlStatement = string.Format("TruncATE table {0}",tablename);    return ExecuteNonquery(dbAlias,sqlStatement) > 0;}
解决方法 打击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 suggests.

即使在确认tablename作为RDBMS中的表名称后,我也建议分隔表名,以防万一使用带有空格或特殊字符的表名.在Microsoft sql Server中,默认标识符分隔符是方括号:

string sqlStatement = string.Format("TruncATE table [{0}]",tablename);

现在,如果tablename匹配一个真实的表,那么sql注入的风险就是这样,而你实际上在表的名称中使用方括号!

总结

以上是内存溢出为你收集整理的c# – 如何保护此功能免于SQL注入?全部内容,希望文章能够帮你解决c# – 如何保护此功能免于SQL注入?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1259224.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存