ASP.NET MVC中使用JS实现不对称加密密码传输

摘要:ASP.NET MVC中登录页面中点击登录后,用户名、密码将被明文传输到Controller中,使用Fiddler等工具可以轻松截获并获取密码, 这是不安全的。 使用对称加密,如AES,密钥将被暴露前端代码,也是不安全的。使用不对称加密能够较好解决这个问题。本文以RSA不对称加密的形式,在JS端通过公钥对密码进行加密,将密文传输到后端后通过密钥进行解密。

关键字: 不对称加密;对称加密;RSA 算法;AES; 密钥;公钥


0 背景

登录是最常见的需求之一,在这个环节,安全问题不可避免,明文传输很容易被截获并暴露密码原文。如下图使用Fiddle中出现的情况。


为了避免这种情况,通常办法有1 使用HTTPS形式解决; 2 使用公钥和不对称加密对密文进行加密;3使用对称加密,比如AES。

这3种方案中,方案1是终极方案,但是需要克服证书获取和配置的问题, 本方案不是本文讨论重点,请有兴趣的自行查阅https://letsencrypt.org/。方案3, 以AES加密为例,必须把加密密钥存放在前端。 而前端对用户来说是开源的,很多开发者尝试把密钥藏的路径很深,但无疑这还是自欺欺人的。

方案2中,在JS端进行密码的RSA加密是有必要的,因为密码需要在用户点击“登录”按钮后被提交到服务器,这个过程被截获是很容易的。同时,防范CSRF类型攻击的特性也必须保留。这就要求:必须使用AJAX在JS端对密码加密,并向后台的AccountController中的LoginAction发起Post请求。而不能使用传统的FormSubmit的方案。

 

AJAX post请求中,需要注意问题: 由于需要防范CSRF攻击的同时保障密文传输安全。需要同时顾及如下问题

问题1: 如何通过AJAX向Controller发起ajax请求?

问题2:如何在ajax请求中加入AntiForgeryToken? 

问题3: AJAX请求前,如何对密码进行RSA加密?

问题4: RSA的key format 有两种, pem格式和C#所支持的XML格式,通常JS支持pem, C#支持xml, 如何转换?

带着问题,进入操作步骤;

 

1 操作步骤

1.1 新建Web Application


1.2 选择MVC, Authentication中选择”IndividualUser Accounts”



1.3 Views-> Account->Login.cshtml中代码修改如下<

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值