c# - asp.net、c#、用户提供的连接字符串和查询

标签 c# asp.net sql-server security

我们正在尝试创建一个 asp.net 页面,使我们的用户能够将信息直接从他们自己的数据库中提取到我们的网站。用户将能够提供:

  • 主机名、端口、数据库名称、用户名、密码和查询。

我对此有一些严重的安全问题,并且想知道如何保护此页面,以便我们阻止用户指向本地主机数据库或其他类型的黑客攻击,从而使他们能够访问我们的数据库。任何人都可以请教吗?

我们正在使用 SqlConnectionStringBuilder 建立与用户数据库的连接,并进行一些简单的检查以确保主机不能是“localhost”或指向我们服务器的其他地址。我觉得这样做会留下潜在的安全漏洞。

此外,他们提供的查询会根据一些不应被允许的关键字进行检查。同样,我认为如果实现不当,这会留下很多空缺。 (我们本质上希望他们只能从他们自己的数据库中执行 SELECT)。

最后,我们用用户的查询执行 EXEC sp_executesql。

我很想听听其他人是如何处理这个问题的? Klipfolio 是一个具有类似功能的组织,所以如果有人知道他们是如何解决这个问题的,那就太棒了!!

谢谢!

最佳答案

在不了解您情况的所有细节的情况下,我认为您的方法不一定是最好的。 “通常”您的数据库服务器不会暴露给世界,它位于防火墙后面,不允许与外界直接连接。将使用您的网页的人也可能将他们的数据库放在防火墙后面,因此即使没有尝试做任何恶意的事情,您的网络服务器也将无法直接连接到他们的数据库服务器,因为它很可能在其后面自己的防火墙。他们要么将它公开给全世界,要么知道您服务器的 IP 地址,以便在他们的防火墙上打一个洞,让您的服务器能够连接。

每当我允许客户将数据上传到我的服务器时,它都是通过文本或 csv 文件或 Excel 文件上传的。这使您可以绕过客户端的任何防火墙问题。现在您需要担心数据中的 SQL 注入(inject)攻击。所以有两件事要做:首先确保在执行 INSERT 或 UPDATE 时使用参数,其次是确保执行上传的进程对您的数据库具有尽可能低的权限。

关于c# - asp.net、c#、用户提供的连接字符串和查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52469852/

相关文章:

C# - 派生类的 XML 序列化

c# - Windows Phone 7 Toast 通知

c# - 使用 C# 和 JSON 在 ASP.Net 中填充下拉列表和文本框

c# - WindowsIdentity.Impersonate in ASP.NET 随机 "Invalid token for impersonation - it cannot be duplicated"

sql - 获取不在数据库中的范围

mysql - 如何在asp.net中比较两个数据库表字段

c# - 将零值格式化为空字符串?

c# - 在循环中维护变量中的数据

asp.net - 当 UpdatePanel 在计时器上触发时 WatermarkExtender 闪烁

sql - Sublime Text : how to correct SQL Server syntax