- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个访问数据库的内部 WPF 客户端应用程序。
该应用程序是支持团队的中央资源,因此包括客户的远程访问/登录信息。目前,该数据库无法通过 Web 界面等方式访问,但有朝一日可能会。
远程访问信息包括客户网络的用户名和密码,以便我们可以远程支持客户的软件应用程序。我需要将用户名和密码存储在数据库中,并为支持顾问提供对它们的访问权限,以便他们可以登录到客户的系统,然后提供支持。希望这是有道理的。
所以问题在于,我不想将用户名和密码以明文形式存储在数据库中,以确保如果数据库遭到破坏,我不会向获得数据库的任何人提供对我们客户网络的访问权限。
我看过密码的双向加密,但正如他们所说,双向与明文没有太大区别,就好像你可以解密它一样,攻击者也可以……最终。这里的问题是我已经设置了一个方法来使用存储在应用程序中的盐和密码,我使用了存储在数据库中的盐,但都有它们的弱点,即如果应用程序被反射(reflect)它暴露盐等
我如何保护我数据库中的用户名和密码,同时仍然为我的支持顾问提供查看应用程序中信息的能力,以便他们可以使用它进行登录?
这显然不同于存储用户密码,因为这是一种方式,因为我不需要知道它们是什么。但我确实需要知道客户端的远程访问密码是什么,因为我们需要在远程访问它们时输入它们。
有人对这里的最佳方法有一些理论吗?
更新我正在尝试构建的功能是针对我们的 CRM 应用程序的,该应用程序将存储客户端的远程访问详细信息。 CRM 系统提供调用/问题跟踪功能,在调查问题的过程中,支持顾问将需要远程访问。然后他们将查看客户的远程访问详细信息并建立连接
最佳答案
有几种方法可以做到这一点;最佳解决方案将取决于您的支持团队访问客户站点的方式、支持团队的成员人数以及您的应用程序的架构。
做这样的事情的最好方法是使用像 Kerberos 这样的东西。这样,支持团队的成员就不必委托(delegate)客户的密码——他们可以写下并在以后用来攻击客户的密码。支持团队可以立即撤销成员的访问权限,而无需客户采取任何行动。
但是,我猜测这是一个更危险的系统,团队成员会获得密码以通过远程桌面、SSH 或类似方式访问客户端系统。在这种情况下,当客户密码泄露给团队成员时,将承担很大的责任。
就我个人而言,我不会接受这种风险。不是我觉得我不能信任我的团队,而是我不能信任我的客户。如果他们的网站发生了什么事(或者即使他们只是假装发生了什么事),突然间我就会成为嫌疑人。我宁愿设计一个没有人可以单独访问客户系统的系统。这可以保护客户免受我团队中的害群之马,并保护我免受错误指控。
无论如何,一种方法是为每个团队成员生成 key 。这些可以是基于密码的对称加密 key ,但是必须集中保存一些 secret key 。更好的办法是使用像 RSA 这样的非对称算法。然后只有团队成员的公钥被集中保存。
当从客户那里收到新密码时,使用每个需要副本的团队成员的公钥对其进行加密。这个加密的密码可以存储在数据库中,并在团队成员每次请求时提供给他们,也可以主动推送给团队成员让他们存储。在任何一种情况下,当需要时,密码都会用团队成员持有的私钥解密(在用他们选择的密码加密的 keystore 中)。
这也有缺点。重申上述观点,团队成员可以访问客户密码。他们值得这份信任吗?如果客户发生了与本系统无关的安全漏洞,但想把责任推给某人怎么办?其次,虽然服务器上没有存储解密 key ,但仍需要为每个团队成员的公钥建立信任。否则,攻击者可能会将他们自己的流氓公钥放入集合中并接收他们可以解密的密码。
关于c# - 安全(加密)困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835826/
我正在使用 OneWayToSource绑定(bind),它似乎总是将我的源属性设置为空。为什么呢?这给我带来了麻烦,因为我需要源属性中目标属性的值而不是空值。 这是我的代码: MyViewModel
我有一个实例变量属性,它被声明和实例化,如下所示: $self->{properties}{$key1} = $value; 我的理解是这将声明属性字段,并将其设置为包含一个键值对的哈希原语。 我正
我正在尝试检查给定的数字是否是质数。首先采用试分割法。但该程序的行为很奇怪。这是我使用的。 int no; no = Integer.parseInt(jTextField1.getText());
我正在使用 NSUserDefaults使一个对象在多个 UIViewController 之间保持同步UITabbarController 中使用的 s .为此,我正在实现以下 - (void)vi
考虑以下 Java 方法: public Boolean compare(String val1, String val2) { return val1.length() > 0 && val
我有一个问题...假设我有一个包含城市名称的表。像这样: id name 1 Los Angeles 2 Madrid 我有一张用户表: uid username locationid
我无法理解这个问题。该代码非常基本,但它的行为却出乎意料。该代码是例程的简化版本,用于从每日数据库中提取每月第 15 天的数据并将其保存到单独的文件中。哪里有问题 ?第一个 cout 打印输入外部 i
我在 中使用大背景标签,我想制作一个宽度为 960px 的容器 div。我希望容器 div 位于从顶部向下 15px 的位置,我想我必须使用 position:absolute。我的困境是;容器内的
我遇到了一个难题。我有一个 hashedX 字段,它是一个散列值/加盐值,按照惯例,加盐值保存在 mysql 数据库的同一行中。 hashedX saltX ------ ---
类 java.io.Reader 和 java.io.InputStreamReader 都有具有完全相同签名的读取方法 public int read(char[] charbuf, int off
我有一个包含多个 C# 项目的 C# 解决方案。我打算在其中添加日志记录。此日志记录应该在所有项目中可用,并且最好使用带有滚动文件日志的 log4Net。 在上述前提下,我可以想到两种方法。 在解决方
我开始学习Python,目前我非常喜欢它。但是,如果你能帮我回答几个问题,这些问题一直困扰着我,我找不到任何明确的答案: 就语言兼容性而言,Python 的 C 实现(来自 python.org 的主
我正在尝试使用 AVAssetWriter 将 CGImages 写入文件以从图像创建视频。 我已经让它在模拟器上以三种不同的方式成功运行,但在运行 iOS 4.3 的 iPhone 4 上,每种方法
我需要对一个想法进行建模,可以将其分解并考虑如下: 图书详细信息 图书价格 这里的问题是您可以为书籍设置许多价格,并且这些价格可能会发生变化。这是一个例子 图书详细信息: --------------
我有一个表,其中的行包含名为 MySubId 的列。此列中的值可以重复。我想找到 MySubId 值和出现次数最多的 MySubId 值的行数。 我有以下查询: SELECT MySubId, COU
我有两个具有多对多关系的类,因此我在它们之间创建了一个联接表(一个非常经典的示例!) 在java+hibernate中我想知道哪种方式更好?使用hibernate多对多注释在这两个类之间有多对多关系吗
我正在尝试创建一个 Android 应用程序来完成以下任务:它通过短信向一组收件人(存储在数组中的数字)发送初始调查问题。然后,对于收到的每个响应,它都会向该参与者发送该系列中的下一个问题。这是我做过
这里有一个关于 IncludeEventHandler 的有趣问题。 我正在开发一个基于 Spring 的应用程序,该应用程序使用具有单独投资组合站点的不同供应商的速度。我让供应商通过向他们提供存储在
我真的无法理解事件和委托(delegate)的概念。我知道委托(delegate)是持有方法引用的对象,可以调用具有相同返回类型和参数的方法,但事件到底是什么? 如果我需要使用事件来制作一个简单的计算
在我正在处理的一个项目中,我有一个扩展 JFrame 的主类(名为 TrackWin)。在此框架中,我使用 JTabbedPane。 用户可以从菜单栏在 Pane 中创建新选项卡。每当发生这种情况时,
我是一名优秀的程序员,十分优秀!