welcome to xlongwei.com

欢迎大家一起学习、交流、分享


QQ:9167702333 邮箱:admin@xlongwei.com

secure login 安全登录,加密表单


分类 Java   关键字 分享   标签 java   web   jquery   发布 hongwei  1463728733496
注意 转载须保留原文链接,译文链接,作者译者等信息。  
注册和登录是非常基础的功能,如果网页协议是http而非https,则安全性就会大打折扣。通常的做法是用户中心和注册登录等需要提交信息的表单页面使用https协议,然后有时却不是那么方便又容易地切换至https,这时可以使用客户端加密数据的方式来实现安全提交表单。

基本思路是使用RSA非对称加密解密,参考login.html
<input type="hidden" name="password"/>
<input type="password" class="form-control {required:true,pattern:'[a-zA-Z0-9]{3,8}',messages:{pattern:'3-8位字母或数字'}}"/>
使用hidden字段来传输密码,而显示出来的密码框由于没有name属性因而不会被提交。
<script src="http://s.xlongwei.com/res/js/jquery/jsencrypt.min.js"></script>
<script type="text/javascript">
var encrypt = new JSEncrypt();
encrypt.setPublicKey("$!props.getProperty('rsa.public.key')");//客户端可以知道公钥
$("form").submit(function(){
if(!$(this).valid()) return false;
$("input[name='password']").val(encrypt.encrypt($("input[type='password']").val()));//提交加密数据
$("input[type='password']").val("xlongwei");//密码框不会被提交
return true;
});
</script>

后台解密得到密码,参考IndexController
password = RsaUtil.decrypt(RsaUtil.getPrivateKey(GlobalConfig.getProperty("rsa.private.key")), password); //私钥保存在服务器端

另一种方式调用https://api.xlongwei.com提供的接口,参考admin/login.html
<script type="text/javascript">
$("form").submit(function(){
if(!$(this).valid()) return false;
jQuery.ajaxSetup({async:false});//同步调用接口,获取加密数据后再提交
jQuery.post("https://api.xlongwei.com/service/rsa/encrypt.json",{data:$("input[type='password']").val(),secret:"#vyj2mtc5i1r4#",publicKey:"$!props.getProperty('rsa.public.key')"}, function(data){
$("input[name='password']").val(data.data);
$("input[type='password']").val("xlongwei");
});
return true;
});
</script>

后台解密也可以调用接口,参考AdminController
JSONObject json = ServiceRequester.request("https://api.xlongwei.com/service/rsa/decrypt.json", StringUtil.params("secret","#vyj2mtc5i1r4#"),"data",password,"privateKey",GlobalConfig.getProperty("rsa.private.key")));
password = json.getString("data");