对于一个项目来说,除了稳定性以及健壮性以外,还需要有较好的安全性,此篇博客简单描述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方式,主要用到的类为Crypto,此类详情参看API。

主要代码:

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

将hashNumberCrypto通过隐藏于传到前台,则此字段可以作为A中字段进行比较

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

主要代码:

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

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

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

salesforce 零基础学习(四十七) 数据加密简单介绍的更多相关文章

  1. 【转】【Salesforce】salesforce 零基础学习(十七)Trigger用法

    看本篇之前可以相应阅读以下Trigger相关文章: 1.https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigge ...

  2. salesforce lightning零基础学习(二) lightning 知识简单介绍----lightning事件驱动模型

    看此篇博客前或者后,看一下trailhead可以加深印象以及理解的更好:https://trailhead.salesforce.com/modules/lex_dev_lc_basics 做过cla ...

  3. salesforce 零基础学习(十七)Trigger用法

    看本篇之前可以相应阅读以下Trigger相关文章: 1.https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigge ...

  4. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  5. salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

    注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...

  6. salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

    项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...

  7. salesforce零基础学习(一百一十一)custom metadata type数据获取方式更新

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.234.0.apexref.meta/apexref/apex_methods_syst ...

  8. salesforce 零基础学习(六十八)http callout test class写法

    此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...

  9. salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现

    项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...

  10. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

    在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...

随机推荐

  1. BFS_最短路径

    已知若干个城市的地图,求从一个城市到另一个城市的路径,要求路径中经过的城市最少. #include<iostream> #include<cstring> using name ...

  2. Delphi 中的自动释放策略-转

    八.使用结构体而不是结构体指针: 很重要 一.指定 Owner 后, 随 Owner 连带释放: //uses Vcl.StdCtrls, Vcl.ExtCtrls; var panel: TPane ...

  3. 通用js函数集锦<来源于网络/自己> 【一】

    通用js函数集锦<来源于网络/自己>[一] 1.返回一个全地址2.cookie3.验证用户浏览器是否是微信浏览器4.验证用户浏览器是否是微博内置浏览器5.query string6.验证用 ...

  4. T-SQL Recipes之Index Defragmentation

    The Problem 索引一直是优化查询性能的不二法门.其中一个最直接的问题便是当审查一个低性能查询语句时,检查索引是否在正确的地方或者加索引没有.运行一个batchjob查看索引碎片,必要时采取步 ...

  5. Ctrip Mydream

    --我不知道以后如何,我不知道我做的事情能否持续,我只是希望有一天我真的在这条路上走下去了,我只希望去一次这里检验一下自己,我希望自己努力争取这个机会. .Net技术专家 岗位职责: 1.主导本领域的 ...

  6. Oracle OEM

    一.OEM是什么 Oracle Enterprise Manager(Oracle企业治理器,简称OEM)是通过一组Oracle程序,为治理分布式环境提供了治理服务. 二.配置OEM 三.启动OEM ...

  7. 理解storm的ACKER机制原理

    一.简介:       storm中有一个很重要的特性: 保证发出的每个tuple都会被完整处理.一个tuple被完全处理的意思是: 这个tuple以及由这个tuple所产生的所有的子tuple都被成 ...

  8. HTML元素基础学习

    HTML元素 HTML文档是由HTML元素定义的.HTML元素是指从start tag(opening tag)到end tag(closing tag)的所有代码,即start tag + cont ...

  9. javascript的变量声明提升

    这篇随笔是对网上文章的整理吸收 1. javascript的作用域是函数,不是块 2. 在函数内部,javascript解释器会把var变量提升到当前域的最前面,但是函数体不会提升. 看下面例子: v ...

  10. Webform Session、Cookies传值,跳转页面方式

    Session:每个独立的浏览器都会创建一个独立的Session,不是一台电脑一个Session 存放位置:服务器上 作用:只要里面有内容,那么这个网站中所有的C#端都能访问到这个变量 优点:安全,速 ...