将用户上传的 CSV 文件从 ASP.NET 解析到 MySQL DB。安全问题

Posted

技术标签:

【中文标题】将用户上传的 CSV 文件从 ASP.NET 解析到 MySQL DB。安全问题【英文标题】:Parsing a user uploaded CSV file from ASP.NET into MySQL DB. Security Issues 【发布时间】:2012-04-23 02:32:47 【问题描述】:

我正在编写一个 ASP.NET 网站,用户可以在其中上传一个 .CSV 文件,我想从中提取数据到 mysql 数据库的表中。我想知道通过防止 SQL 注入或对我的数据库造成其他危险来做到这一点的最安全方法是什么。

我还想知道提取它的最佳方法是什么?例如,是否建议使用 API 直接从按钮按下后提取数据,或者我应该将文件推送到服务可能会定期提取的临时位置?

提前致谢

【问题讨论】:

仅仅因为数据来自 CSV 文件并不意味着您必须为防止 SQL 注入执行任何特殊操作。完全相同的技术普遍适用于此。 马克说了什么。清理您的用户输入,不要发明自己的解决方案,使用准备好的语句,使用权限最少的数据库用户...... 准备好的语句是什么意思?你会应用什么技术? 【参考方案1】:

使用准备好的语句在后端使用您的 CSV 数据。准备好的语句安全地转义数据以防止 SQL 注入。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.prepare(v=vs.71).aspx

切勿创建通过连接或连接字符串来使用数据的动态字符串。只使用准备好的语句。

这是通用的,无论输入源如何都应该使用。

【讨论】:

您好,感谢您的评论。我从不使用动态字符串并且总是使用参数,但为什么准备语句安全地转义它们?它没有提到有关防止该 msdn 文章上的 sql 注入的任何内容。此外,您建议的方式意味着遍历数据表中的每一行并单独插入它们。我想知道是否有任何方法可以一次性将所有内容从 CSV 中导入?

以上是关于将用户上传的 CSV 文件从 ASP.NET 解析到 MySQL DB。安全问题的主要内容,如果未能解决你的问题,请参考以下文章

asp.net mvc:检查上传文件'text/plain'或'text/csv'的内容类型,我总是得到application/octet-stream

asp.net mvc:检查上传文件'text/plain'或'text/csv'的内容类型,我总是得到application/octet-stream

从 CSV 生成 Excel 电子表格(ASP.NET C#)[重复]

如何使用 C# 从远程位置将 Excel csv 或 xls 文件的行读入 ASP.NET 应用程序?

将Asp.Net WebAPI从AngularJS App的Asp.Net MVC站点移动到一个单独的站点

如何将文件从 ASP.NET 上传到另一个 Web 应用程序