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

对于一个项目来说,除了稳定性以及健壮性以外,还需要有较好的安全性,此篇博客简单描述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。

主要代码:

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,篇中有错误地方欢迎指正,有不懂的欢迎留言。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏知无涯

PHP程序员应该知道的15个库

3429
来自专栏非著名程序员

关于Android中设置闹钟的相对比较完善的解决方案

? 前些时候,有人在我「非著名程序员」公众号的后台问我有没有设置闹钟的demo,我当时说承诺为大家写一个,一直没空,直到最近又有人跟我要,我决定抽时间写一个吧...

23510
来自专栏数据之美

SSD Win8 系统盘 4K 无损对齐历险记

1、背景:为什么要 4K 对齐 簇是系统在硬盘上读写文件时的单位,是一个数据块(逻辑概念)。而扇区是硬盘划分的最小单位值,就是簇(数据块)占用的地方(物理概念)...

21610
来自专栏Kurt Niu 的博客

使用C# 对CPU卡基本操作封装

Github 地址:https://github.com/zifeiniu/CPUCardLib

852
来自专栏iOSDevLog

调试目录

2637
来自专栏Seebug漏洞平台

TP-LINK WR941N路由器研究

是TP-Link WR940N后台的RCE, 手头上正好有一个TP-Link WR941N的设备,发现也存在相同的问题,但是CVE-2017-13772文章中给...

3798
来自专栏何俊林

Android支付实践(三)之银联支付功能(客户端+服务端)

前言:由于支付宝和微信支付都须要提供这个那个的认证材料,对于个人开发者想尝试,确实有不少麻烦,今天介绍的银联支付,对于个人开发者,可以说是福音了。来自chent...

3298
来自专栏Kurt Niu 的博客

[开源]使用C# 对CPU卡基本操作封装

Github 地址:https://github.com/zifeiniu/CPUCardLib

702
来自专栏我和PYTHON有个约会

Django来敲门~第一部分【5.1.项目配置settings.py详解】

我们创建好了一个Python项目(mysite/)之后,需要在项目中添加模块应用(polls/),在模块应用中添加处理功能逻辑,如添加模块中的视图处理函数(po...

633
来自专栏熊二哥

.NET工作准备--04ASP.NET

(已过时) ASP.NET 1.开发基础 *asp.net以什么形式运行?.net宿主的概念,ISAPI的概念,ASP.NET基本运行机制; .net宿主...

1895

扫码关注云+社区