问题描述
|
我在域A上有一个网站,该网站的页面带有html表单,用户可以在其中输入字符串,然后提交给域B。
该表单当前包含一个隐藏的输入字段,其中包含域B用于“认证” /标识域A的名称/值。
现在,我主要是一名C#编码人员,只有很少的网络经验,甚至我都知道这不是一种安全的方法。
域A上的表单安全地提交到域B的最佳方法是什么?
我考虑过的一些方法:
让域B通过域名或IP标识域A。我想这比隐藏的输入字段要好,但是域名和IP可以被欺骗,对吗?
通过隐藏字段以外的其他方法,使域A通过身份验证凭据(例如,用户/通过)到域B。不知道如何。
编辑
另一种可能性:创建一个私钥/公钥。让域A将私钥传递给域B,域B可能会通过HTTPS使用公钥进行验证。不知道域A如何传递私钥而不在HTML中公开私钥。有想法吗?
解决方法
带有值以验证用户身份的隐藏输入可以是安全的方法,具体取决于值是什么以及如何生成。您可以让域A对域B进行AJAX调用,以请求必须与表单一起提交的令牌。
此令牌仅应由域B接受一次,并且也应在一定时间后过期。
最后,您还可以发送用户标识符。应该以某种方式对它进行加密以进行传输。我建议使用HMAC或公共密钥加密。
选项2:使用OpenID;)
,我过去做过类似的事情。大多数人对此方法不屑一顾,但对我有用:
在两个域上定义匹配的用户。给他们两个都使用相同的密码(您应该将其设置为永不过期)。
然后,当您以该用户的身份在域A中运行您的应用程序时,它将使用传递身份验证在域B上进行身份验证。您只需要确保该用户帐户在两个域上都具有正确的权限即可。