我有一个相当简单的情况,我只是不熟悉C#来解决。
我有一个从Web服务返回的DataTable对象。我希望用户能够过滤和分析数据,因此我创建了一个DataView对象。我有一个ListBox是
其中一个基本功能是我希望他们能够搜索数据。所以我很聪明,为文本框添加了一个文本框和一个事件。
private void textbox1_TextChanged(object sender, EventArgs e)
{
((DataView)listbox1.DataSource).RowFilter = "mycolumn LIKE '*"+textbox1.Text+"*'";
}
问题是,如果用户在意外时输入任何特殊字符(比如[或]或*),它可能会搞砸匹配表达式。它就像一个经典的SQL注入安全问题。问题是SQL黑名单字符有很好的文档记录(并且通常库甚至包含使字符串sql安全的方法,因为它是如此常见的问题)但是这个“RowFilter”表达式不是SQL,并且没有记录良好的黑名单或转义字符。
有没有人知道如何优雅地解决这个问题?
答案 0 :(得分:0)
所有可用的关键字/功能都有详细记录:http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression(v=vs.71).aspx
您没有SQL注入的安全问题 - >你只需要处理数据表,这样就没有人可以未经授权访问数据库。你要做的最重要的事情是逃避单引号和最终的额外通配符。