代码之家  ›  专栏  ›  技术社区  ›  Mitchel Sellers

在处理过程中存储用户名/密码

  •  4
  • Mitchel Sellers  · 技术社区  · 16 年前

    在ASP.NET应用程序的上下文中工作时,我正在创建一个页面,该页面将能够对我们环境中的许多数据库之一执行数据库脚本。为此,我们需要提示用户输入用户名/密码组合,此值可用于所有服务器,而不会出现问题。

    问题是存储此信息的最安全位置在哪里?我们需要临时存储它,当它们在这个特定的页面上时,它们可以通过多个回发来执行数百个脚本。据我所知,我有3个选择,我不确定什么是最好的。下面是我的选择,这里每个人的建议是什么?什么是最安全的,同时对用户还是友好的?

    在视图状态中存储信息

    我们讨论的第一个想法是在用户为页面提供视图状态后存储信息。这是有帮助的,因为信息将只存在于页面的生命周期中,但是,我们不确定安全性的影响。

    在会话中存储信息

    但是,我们的下一个想法是将其存储在会话中,但是这样做的缺点是,信息可以提供给应用程序中的其他页面,并且信息总是停留在服务器的内存中。

    在应用程序中存储信息

    最后一个想法是将它存储在应用程序缓存中,使用一个特定于用户的密钥,并滑动5分钟的到期时间。这对于其他页面仍然是可用的,但是它将确保信息缓存的时间更短。

    为什么?

    最后一个重要的问题是“你为什么要这样做?”我们为什么不使用他们的局域网ID呢?嗯,我们不能使用LAN ID,因为缺少对委派的网络支持。

    S0推荐的解决方案是什么?为什么?它有多安全,我们能做到吗?

    更新

    已经讨论了大量的信息。为了澄清,我们在内部网环境中运行,由于网络的限制,我们不能使用模拟或委派。

    7 回复  |  直到 14 年前
        1
  •  3
  •   Tomalak    16 年前

    在我看来,这次会议的自然地点是会议。

    我不知道为什么你似乎害怕“应用程序中的其他页面”(你控制了应用程序,不是吗?)但是如果你真的是这样,你可以在存储之前使用某种加密。

    但如果你要这么做 那个 数据也可以在视图状态中。

        2
  •  3
  •   John MacIntyre    16 年前

    我不喜欢这些想法,但是 完全讨厌视图状态的想法 .

    我不知道您要连接多少个数据库,但是如果数量有限,我想知道是否以标准的安全方式处理您的身份验证和授权,然后通过 使用身份模拟的集成安全性 使用权限最小的帐户。

        3
  •  1
  •   Mehrdad Afshari    16 年前

    这个 ViewState 方法是好的,但有一个问题,即您向客户机提供用户名和密码。即使你加密了它,如果一些攻击者拥有加密密钥,情况也不会很好。

    关于 Session Application 我不认为 应用 方法是有意义的。数据是用户特定的,所以 会话 应该是去的路。一旦用户的会话关闭,它就会消失。顺便说一下,如果您选择将其存储在服务器上,请使用 SecureString 班级。

        4
  •  1
  •   Alejandro Mezcua    16 年前

    正如约翰麦金太尔所写,您应该为此使用集成的安全性和模拟。

    如果由于某种原因您不能使用它,并且您将提供自己的登录页面,那么请使用SSL来加密浏览器和服务器之间的通信。使用viewstate方法也是完全不安全的。如果您不使用ssl,那么有一些工具可以很容易地查看内容。从枚举的方法中,最好的方法是使用会话状态。您可以从Web服务器内存中卸载保存会话状态并保存 that data in a database 你可以按照你想要的方式来保护自己。如果你不喜欢这些工作方式,你甚至可以自己写。 session state provider 在那里申请你需要的安全。

        5
  •  0
  •   ScottS    16 年前

    在viewstate中存储会增加您的曝光,因为密码会一次又一次地在互联网上飞来飞去。加密是否足够好来解决这个风险取决于您。

    使用应用程序或会话都会在服务器中保留密码。如上所述,secureString将防止人们简单地从内存中读取密码。会话将扩展到更多的用户,可能更重要的是扩展到多个服务器,这比应用程序容易得多。除非您确定永远不会使用超过1个Web服务器,否则我不会使用应用程序,因为所有服务器的同步将由您决定。

        6
  •  0
  •   Jon Ericson Homunculus Reticulli    16 年前

    不要存储密码!

    而是存储密码的散列值。见: http://en.wikipedia.org/wiki/Crypt_(Unix)#Library_Function .

    我知道这并不能回答问题,但是忽视这个建议的程序员越多,犯罪分子就越容易窃取数据。不要让你的组织变成新闻报道。

        7
  •  0
  •   Andrew T Finnell    14 年前

    用户名/密码确实不应该存储在任何地方。

    您可以存储一个实时数据库连接,最好是从会话对象中的池进行存储。只要登录到数据库,就只需要用户名/密码。

    虽然另一个页面可以使用实时连接,但它不会像存储用户名/密码那样给任何其他人永久访问数据库的权限。