![针对需要访问 SQL 数据库的面向 Internet 的 Web 应用进行设计](https://linux22.com/image/572575/%E9%92%88%E5%AF%B9%E9%9C%80%E8%A6%81%E8%AE%BF%E9%97%AE%20SQL%20%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E9%9D%A2%E5%90%91%20Internet%20%E7%9A%84%20Web%20%E5%BA%94%E7%94%A8%E8%BF%9B%E8%A1%8C%E8%AE%BE%E8%AE%A1.png)
我需要创建一个 Web 应用程序来访问我们公司 LAN 上的 SQL 数据库。这是一种好方法吗?安全吗?
创建一个 DMZ,目前还没有。
将 Web 服务器(运行 IIS)放置在 DMZ 中,将其放入自己的工作组中,而不是使其成为企业域的成员。据我所知,我们只需要一个盒子,因此无需为 DMZ 创建单独的域。
在 DMZ 前面(路由器和 Web 服务器之间)放置防火墙,只允许 HTTP 和/或 HTTPS 访问 Web 服务器。
在 DMZ 后面(Web 服务器和 LAN 之间)放置另一个防火墙,只允许从 Web 服务器到 LAN 上的 SQL 服务器的 SQL 连接,并阻止其他所有连接。
对于上述配置,我们需要购买 2 个防火墙、一个路由器以及一个运行 IIS 的服务器。该应用程序基本上只是一个 .Net 表单,它可以访问数据库并在完成后创建可保存的 .pdf。我认为我们应该研究应用程序层防火墙,以帮助防止 SQL 注入/跨站点脚本等)?
该网络设计是否有效?还有其他更具成本效益和/或更安全的布局方案吗?
答案1
您的架构基本上是合理的,但请注意,您可能只需要一个防火墙设备,DMZ 规则用于隔离应用服务器。
请考虑以下内容,它仅显示理论应用服务器的进出流量。
其他一些零散的想法:
看看我对你的问题的评论。
问问自己:Do I *need* to access my main SQL server at all?
——如果你能将提取的数据推送到 DMZ 应用程序,而不是让其穿过防火墙并访问你的公司网络,那么从安全角度来看,你会处于更有利的位置。如果你必须直接访问您的 SQL 服务器,确保使用具有尽可能最小权限的帐户。
- 不要让它从任何不需要读取的表中读取。
- 不要让它写入任何不需要写入的表
(最好不要写入任何东西!批量更改并让另一个程序加载它们,该程序首先对它们进行健全性检查。)