我喜欢实现mechanisam,其中Cliend Browser上的字符串在页面发布到服务器之前使用密钥加密,然后我可以使用服务器端C#代码使用相同的密钥解密该发布的字符串。
我使用Random类在每个页面请求上生成唯一键。
/I(\s[a-zA-Z]*\s?){0,5}(TV|chocolate|fire)/
<asp:TextBox runat="server" ID="txtData" ClientIDMode="Static"></asp:TextBox>
<asp:HiddenField runat="server" ID="ClientKey" ClientIDMode="Static"/>
<asp:Button runat="server" Text="Submit" OnClick="OnClick" OnClientClick="return EncryptData();"/>
function EncryptData() {
var plaintext = $('#txtData').val();
var secret = $('#ClientKey').val();
var encrypted;// Encrypt(plaintext, secret);
$('#txtData').val(encrypted);
return true;
}
我在HDFC银行登录页面上看到过相同的机制,他们首先加密用户的密码,然后发布表格。
答案 0 :(得分:0)
我会重新考虑你在做什么的用法。您正在使用密钥加密某些内容,然后将该内容与密钥一起发送到服务器。当然,阅读价值会更难,它可能会吓到一些低级嗅探器,但它并不安全。它是security by obscurity。
这样想。爱丽丝想要给鲍勃发送一份情书,但爱丽丝不想要鲍勃以外的其他人阅读情书,所以她把它放在保险箱里。考虑到情书安全,她将邮件邮寄给鲍勃。但她记得鲍勃无法打开保险箱,所以在相同的包装中,她也把钥匙放在保险箱上。
这里的问题是邮局或任何其他可以访问包裹的人都可以打开保险箱。在这个比喻中,Alice是客户端(网络浏览器,javascript),互联网线是邮局,服务器是Bob。
有一些方法可以使用javascript加密它。如:
http://point-at-infinity.org/jsaes/
https://code.google.com/archive/p/crypto-js/
如果您仍然希望加密客户端上的数据,这样做没有坏处,我会避免将请求中的密钥发送回服务器。它应该足以让服务器将其发送到客户端。然后客户不应该将其发回。相反,您可以在服务器端存储会话。通过这种方式,您至少可以使中间人的威胁变得更小。
但在这种情况下,我会使用https代替发送数据。
HTTPS统一资源标识符(URI)方案具有相同的名称 标准HTTP方案的语法,除了它的方案标记。 但是,HTTPS表示浏览器使用添加的加密层 SSL / TLS保护流量。 SSL / TLS特别适用于HTTP 因为它可以提供一些保护,即使只有一面 通信已通过身份验证。这是HTTP的情况 Internet上的事务,通常只有服务器 经过身份验证(由客户端检查服务器的证书)。
有人可能认为https can be cracked as well,但它仍然是发送敏感数据的更好选择。
答案 1 :(得分:0)
经过一番思考,这是我建议你可以做的。让其他人了解他们的想法。
创建一个额外的密钥。密码短语(可能是问答类型,母亲姓名或宠物名称等),并将其用作加密或解密的密钥。
因此,在记录用户时将输入
提交。
这样,任何拦截您登录服务器端的请求的人都没有密钥可以解密。正如smoksnes所提到的,使用https来提高安全性