c# – 如何生成不易受SQL注入攻击的字符串
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何生成不易受SQL注入攻击的字符串,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1587字,纯文字阅读大概需要3分钟。
内容图文
![c# – 如何生成不易受SQL注入攻击的字符串](/upload/InfoBanner/zyjiaocheng/906/9bf58af38e30444b88424b88afedfa73.jpg)
我有一个生成查询字符串的实用程序,但静态代码分析器(和我的同事)因为“SQL注入攻击”的风险而抱怨.
这是我的C#代码
public static string[] GenerateQueries(string TableName, string ColumnName)
{
return new string[] {
"SELECT * FROM " + TableName,
"SELECT * FROM " + TableName + " WHERE 1=2",
"SELECT * FROM " + TableName + " WHERE [" + TableName + "Id] = @id",
"SELECT * FROM " + TableName + " WHERE [" + TableName + "Id] = IDENT_CURRENT('" + TableName + "')",
"SELECT * FROM " + TableName + " WHERE [" + ColumnName + "] = @value"
};
}
在代码中,我总是只使用常量字符串来调用它,例如
var queryList = GenerateQueries("Person", "Name");
有没有办法重写这个功能,以便它是“安全的”?例如,如果我使用的是C而不是C#,我可以编写一个宏来安全地生成字符串.
目前,我唯一的选择是为每个表复制/粘贴这个SELECT语句块,这是一个丑陋的维护负担.
复制/粘贴真的是我唯一的选择吗?
编辑:
谢谢你的回复,特别是William Leader.现在我看到我的问题是错误的.这不仅仅是我连接查询字符串,而是将它们存储在变量中的事实.唯一正确的方法是使用常量构造SqlDataAdapter,例如,
var adapter = new SqlDataAdapter("SELECT * FROM PERSON");
没有其他选择.所以是的,会有很多复制/粘贴.我开始后悔没有使用EF.
解决方法:
起初我很震惊,但是在反思中,这与在代码中已经存在如下所示的SQL语句没有什么不同:
"SELECT * FROM Person"
我们一直这样做.
如果
这里有一个重要的警告.如果您可以控制函数的调用方式,那么这仍然是正确的.因此,如果此方法是某个地方的数据层类的私有成员,那么您可能没问题.但我也想知道这有多么有用.看起来你没有为你从编写查询中得到的东西节省太多.
另外,习惯于忽略静态分析工具并不好.有时候他们会给你一些你知道错误的东西,但无论如何你都会改变它,这样当他们找到重要的东西时你就不会忽视它.
内容总结
以上是互联网集市为您收集整理的c# – 如何生成不易受SQL注入攻击的字符串全部内容,希望文章能够帮你解决c# – 如何生成不易受SQL注入攻击的字符串所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。