首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用加密和可能的ASP.Net API / WebServices保护公共发行版的ASP.Net

使用加密和可能的ASP.Net API / WebServices保护公共发行版的ASP.Net
EN

Stack Overflow用户
提问于 2019-06-06 15:00:28
回答 1查看 148关注 0票数 0

抱歉,这是两个部分的问题.布奥。我不知道如何确保应用程序的安全,但我现在需要确定它,然后才能在项目中遥遥领先。

我目前正在完成Windows VB.Net应用程序的最后几个部分。

该应用程序将将潜在敏感数据远程存储在SQL数据库中,应用程序需要连接到该数据库,以便撤回数据。

我之前曾问过,我可以帮助尽可能多地保护这个应用程序,因为它将部署在公共领域。我研究了加密连接字符串和敏感细节,以及混淆代码和将数据库保护到只能执行存储过程的最小用户。

我最初的理论是:

  • 加密app.config文件中的SQL字符串
  • 安全地加密代码中的存储过程名称
  • 对代码进行混淆/加密,使代码变得乱七八糟,难以读懂
  • 设置一个只具有执行命名存储过程和删除任何其他权限(甚至看不到表/系统表等)权限的SQL用户,因此用户必须知道过程的名称和参数本身。

我对这一特殊设置的主要关注和最大的恐惧是,它仍然很容易被黑客攻击。所以我想第一个问题是..。

选项1:(最不安全)上述攻击的可能性有多大,我遗漏了哪些步骤?用户如何能够轻松地解压缩应用程序,仔细筛选模糊/密码的代码,提取加密的过程名和SQL连接字符串,使用IP通过带有用户名和密码的SSMS连接,并坐在那里猜测用户名的输入参数,直到散列和盐渍密码弹出为止?

是否有更好的方法来做以上的事情,或者我是不是错过了一步,如果我沿着这条路走下去,会大大增加安全性吗?我死记硬背地读到了每个用户的单个SQL帐户,但不确定这会带来什么安全好处?

选项2:(最安全) web或WebService在我的场景中是如何帮助或工作的?因此,这当然是一种选择,作为前进的道路,我不反对它,但我是一个严重的新手,当涉及到ASP.Net和它的服务。所以我想我的主要问题是,是否有一个指南,或者至少一个例子,我可以看到的东西,甚至帮助别人可以提供,甚至一个有偿的培训课程,可以告诉我如何建立这样的东西?

另外,如果API / WebService可以以JSON格式提供数据,那么WebService如何接受数据作为插入数据库的请求?我甚至不确定API / WebService是否能做到这一点,因为我认为这种设置会使它成为单向数据传输。

如果API / WebService是在线托管的,并且将检索它的URL嵌入到应用程序中,那么这又如何更安全呢?最终用户可以不简单地抓取URL,然后用一个可爱的GUI发送自己的数据请求来帮助他们吗?

对于多个问题表示歉意,但我很难理解如何将当前的事情向前推进,并且考虑到数据存储的性质,它必须相当安全。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-06 17:10:11

好吧,让我们先看看选项:

选项1

首先,如果连接字符串是纯文本的,那么app.config就不是那么安全。实际上,您可以加密配置文件的一部分,这可能会给您的安全性增加更多。接下来是代码的反编译。这是你根本做不了的事。无论您在代码中添加了多大程度的混淆,也不管您减少了多少,代码始终是可反编译的。毕竟,你的电脑需要阅读代码,对吗?所以,是的,混淆可能会增加应用程序的源代码安全性。然而,它不能保证100%的安全性。

也不确定您对数据库有多少经验,但正如您所说的,您已经创建了一个只能执行某些存储过程的SQL server终端用户,那么您为什么要担心有人访问您的密码呢?

这也让我想知道为什么你会担心hashed+salted密码。如果你的应用程序没有产生数十亿美元,而且你也没有像谷歌或Facebook那样统治市场,那么给我一个理由,我为什么要黑进你的系统?看看你申请的是哪一种皮肤?

选项2

现在我们开始谈话了!因此,如果我们想讨论Web ,让我们先忘掉安全性。

假设一个用户使用您的桌面应用程序,尝试直接将他/她的数据插入数据库,而没有任何Web。假设当他点击“”或类似的东西时,用户的互联网连接就会下降。你知道接下来会发生什么吗?用户打开到数据库的连接,尝试插入一些数据,但在数据库真正获得需要插入的全部数据之前,应用程序失去了连接,您的SQL查询要么不完整,要么变得奇怪,该查询被执行,砰!整个表都损坏了!嗯,有时候甚至更糟,但是嘿,我不要再吓唬你了。

Web 可以将您从这种情况中拯救出来。我不打算详述,但最简单的逻辑是:

要么您正确地调用API,然后API进行数据库调用,要么您不进行正确的调用,API就不会继续进行数据库调用。

API还可以让您更好地控制某人从您的服务器上实际获得的信息。在可伸缩性方面,您也有一个巨大的优势。因为您对Web和数据库进行了同样多的更新,而不必对最终用户的应用程序做任何操作,因此减少了用户下载每个更新的需求。

现在,让我们把一件事弄清楚。Web和Web是两种不同的东西(尽管关系密切)。无论如何,从Web获取数据所需的请求称为GET请求。当您想插入数据时,您需要发出一个POST请求。要删除,您需要发出一个Delete请求,要更新,可以使用PUTPATCH

如何在每个请求上服务器数据是一个完全不同的主题。你可以在谷歌上搜索。但我会让你容易的。跟这个一起走:Asp.Net Core2.0WebAPI教程

此外,一定要在搜索查询中包括"RESTful“。

无论如何,最好的选择实际上是将选项1选项2结合起来。

  1. 可以对连接字符串的部分进行加密。
  2. 混淆代码
  3. 创建一个RESTful Web
  4. 创建具有有限权限的SQL server级别用户。
  5. 确保服务器的安全性(这是一个完全不同的主题)
  6. 使用适当的工具和设置边界来监控进出电话。

我想这就是你现在所能做的。但是如果你有很多资源,比如说,像Google或Facebook这样的数十亿美元,你可以为你的安全增加更多!

干杯。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56480260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档