salesforce 零基础学习(四十七) 数据加密简单介绍

对于一个项目来讲,除了稳定性以及健壮性之外,还须要有较好的安全性,此篇博客简单描述salesforce中关于安全性的一点小知识,特别感谢公司中的nate大神和鹏哥让我学到了新得知识。git

项目简单背景:github

假设有两个sObject,分别是A和B。B是A的子sobject。表单中元素显示的是B的相关字段,这些字段A中也所有包含。表单中包含了9个元素,点击提交的时候须要分红4组校验,每一组中只要有一个元素修改过,此组元素就须要所有按照特有的校验规则校验。此处的修改过表明输入框中的内容和A中的内容不一致,则视为修改,而且表单中2组和3组有两个字段涉及到用户隐私,不容许经过<input type="hidden">传递到前台.且此校验规则仅为前台校验,用于用户是否须要进行校验字段进行提交。安全

 

分析:(第一种开发人员很容易想到,能解决可是效率低且影响性能)dom

1.最开始考虑的是经过visualforce自带的remoting方式提交这两个字段,经过Visualforce.remoting.Manager.invokeAction提交到后台指定的方法去比较A表记录中的这两个值,若是和B中相同则不用校验2和3,若是有哪一个不相同则在result中进行表单校验处理。此种方式坏处为从校验到提交须要请求两次,影响性能。性能

2.将2组和3组涉及隐私的字段值经过某种加密或者签名方式经过<input type="hidden"/>方式传到前台,前台输入框内容以一样规则的加密方法进行加密,此种加密方法不可逆,比较两个加密值,若是相等,则说明A和B中的值相等,不须要修改相应组块。加密

作法:spa

此处参考的连接以下:code

1.https://developer.salesforce.com/page/Apex_Crypto_Classblog

2.https://github.com/sytelus/CryptoJS开发

1.apex端:controller端对两个字段值进行加密,加密能够选择不少加密模式,这里选择使用sha1方式,主要用到的类为Crypto,此类详情参看API。

主要代码:

1 Blob hashNumber = Crypto.generateDigest('SHA1',Blob.valueOf('the content you need to crypto')); 
2 String hashNumberCrypto = EncodingUtil.convertToHex(hashNumber);

将hashNumberCrypto经过隐藏于传到前台,则此字段能够做为A中字段进行比较

2.visualforce page端:主要经过SHA1的js库对前台的输入框内容进行加密,而后同隐藏于的A的字段进行比较

主要代码:

1 var hash = CryptoJS.SHA1("前台取到的dom元素对应的value");
2 console.log(hash.toString());
3 //The hash you get back isn't a string yet. It's a WordArray object.
4 //When you use a WordArray object in a string context,
5 //it's automatically converted to a hex string.

经过hash.toString()值以及hashNumberCrypto对应的隐藏域的值比较即可以更加安全的保护用户隐私同时解决用户提出的问题。

总结:此篇主要基于信息安全考虑实现前台两个sObject中相关字段校验问题,主要用到的是Crypto类相关知识,详情请查看对应的类的API,篇中有错误地方欢迎指正,有不懂的欢迎留言。

相关文章
相关标签/搜索