【问题标题】:How to pass data securly between web sites?如何在网站之间安全地传递数据?
【发布时间】:2012-03-16 05:46:54
【问题描述】:

如果我有一个用于访问其他网站的门户。

假设我有一个门户 A 。我想访问网站B

如果 B 需要一些关键信息才能像 username 一样工作。我想安全地传递这些信息。


所以我制作了这样的表格:

 <%--------------------------------------------------------------------------------------%>
    <form id="frm_sal" action="B URL the first page" method="post">
    <input id="hdn_sal_Emp_Num" type="hidden" runat="server" name="hdn_sal_Emp_Num" />
    <input id="hdn_sal_user_name" type="hidden" runat="server" name="hdn_sal_user_name" />
    <input id="hdn_sal_result" type="hidden" runat="server" name="hdn_sal_result" />
    </form>
  <%--------------------------------------------------------------------------------------%>

如果客户点击门户中的链接A,我将提交到此表单。

每个网站一个表格。

我的问题是关于如何保护这些数据并防止篡改。

【问题讨论】:

  • B 上的常规安全措施将尝试防止这种情况发生。
  • 我是否应该通过某种方式保护隐藏字段以防止篡改或任何黑客攻击?
  • 两个站点可以读取同一个数据库吗?
  • 不,这并非一直如此......

标签: c# asp.net security hidden-field tampering


【解决方案1】:

这有几种工作方式。

首先是以某种方式对查询字符串进行加密,我想到了 mcrypt,它得到了良好的跨平台支持,这确实依赖于不破坏你的盐/密码的人,这可以通过经常更换盐来缓解。您遇到的另一个问题是回复攻击,这是当有人将 URL 从一个用户复制粘贴到另一个浏览器时,本质上是复制请求。这可以通过在 URL 中使用日期时间以及不能重复使用的一次性令牌来缓解。

另一种方式是两台服务器进行通信,当您将用户从一个站点发送到另一个站点时,您通过某种方式的服务器通信协议(SOAP、REST 等)发送数据(带有唯一令牌/guid)弥补),然后只给用户令牌传递。

除非网站是内部网站,否则应始终避免通过 IP 地址锁定,许多用户拥有多个 IP 地址并使用各种规则沿 IP 传播数据,以便他们可以更改中间请求,甚至是一些大型 ISP(AOL成为其中之一)强制用户通过具有多个端点和不同地址的代理。

最后一个选项是拥有一个共享数据存储,即两个 Web 服务器可以“对话”以查询用户信息的数据库。如果它们在同一个域中,这会更容易,因此您可以设置一个在两个站点上都可以使用的会话 cookie,如果不是,那么您需要返回到正在传递的唯一令牌。

【讨论】:

    【解决方案2】:

    Pass data from page to page safely 中,一位用户描述了创建一个自定义类来保存您的敏感数据并将其放入缓存中。我相信您也可以使用 Session 来完成您正在讨论的内容:How to pass a hidden field from one page to another?

    我相信有几种方法,但我认为我的知识不足以告诉你哪种方法最好,但我希望我提供的这些链接能够为你指明正确的方向!

    【讨论】:

      【解决方案3】:

      在将信息发送到客户端之前,将&lt;form&gt; 中的信息加密,然后在另一端使用私钥对其进行解密。

      这是一个很好的加密示例。 Encrypt and decrypt a string

      这是我喜欢做的事情。创建一个名为“SharedSession”的类并添加您要共享的属性,这些属性甚至可以是其他类。也添加一个时间戳属性。将类序列化为 Json 字符串 (Json.net),对其进行加密并将其推送到表单字段中。

      当表单发布到另一端时,将其反序列化为“SharedSession”类。

      使用时间戳字段有两个原因:

      1) 使加密数据看起来总是在变化。例如,如果您一遍又一遍地为当前用户发送相同的凭据,则加密字符串永远不会改变,因此时间戳会强制加密字符串每次都显示不同。

      2) 确保发布的数据不会过时或过时。设置大约 1 分钟左右的阈值。如果数据超过 1 分钟,请将其丢弃。

      EDIT
      

      另外一件事...不要将您的隐藏表单字段称为“SharedSessionData”或任何黑客可能会感兴趣的内容。将其称为“促销广告数据”之类的名称以将其赶走。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-19
        • 1970-01-01
        • 2016-08-19
        • 2010-10-31
        • 1970-01-01
        • 2010-12-24
        • 1970-01-01
        相关资源
        最近更新 更多