如果我有一个用于访问其他网站的门户网站。
说我有一个门户网站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
中的链接,我将提交此表单。
每个网站的一种表格。
我的问题是关于如何保护这些数据并防止篡改。
答案 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?
我相信有几种方式,我认为我没有足够的知识来告诉你哪种方式最好,但我希望我提供的那些链接能指出你正确的方向!