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,篇中有錯誤地方歡迎指正,有不懂的歡迎留言。

相關文章
相關標籤/搜索