如何在网站之间安全传递数据?

时间:2012-02-26 13:20:16

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

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

说我有一个门户网站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中的链接,我将提交此表单。

每个网站的一种表格。

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

3 个答案:

答案 0 :(得分:2)

Theres有两种方法可以使用。

第一个是加密查询字符串在一些时尚,mcrypt想到哪个是支持得体的跨平台,这确实依赖于不破坏你的盐/密码的人,这可以通过经常更改盐来缓解。你遇到的另一个问题是回复攻击,这是当有人复制将URL从一个用户粘贴到另一个浏览器时,实质上是复制请求。这可以通过在URL中使用日期时间以及无法重复使用的一次性令牌来缓解。

另一种方式是两个服务器进行通信,当您将用户从一个站点发送到另一个站点时,您通过某种方式的服务器通信协议(SOAP,REST,某些东西)发送数据(使用唯一令牌/ guid)组成)然后只是给用户传递令牌。

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

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

答案 1 :(得分:2)

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

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

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

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

使用timestamp字段有两个原因:

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

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

EDIT

另一件事......不要将隐藏的表单字段“SharedSessionData”或黑客感兴趣的任何内容称为“促销 - 广告 - 数据”,以便将其关闭。

希望这有帮助。

答案 2 :(得分:1)

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

我相信有几种方式,我认为我没有足够的知识来告诉你哪种方式最好,但我希望我提供的那些链接能指出你正确的方向!