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

项目简单背景:

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

 

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

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

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

做法:

此处参考的链接如下:

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

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

1.apex端:controller端对两个字段值进行加密,加密可以选择很多加密模式,这里选择使用sha1方式,主要用到的