對于一個項目來說,除了穩(wěn)定性以及健壯性以外,還需要有較好的安全性,此篇博客簡單描述salesforce中關(guān)于安全性的一點小知識,特別感謝公司中的nate大神和鵬哥讓我學(xué)到了新得知識。

項目簡單背景:

假設(shè)有兩個sObject,分別是A和B。B是A的子sobject。表單中元素顯示的是B的相關(guān)字段,這些字段A中也全部包含。表單中包含了9個元素,點擊提交的時候需要分成4組校驗,每一組中只要有一個元素修改過,此組元素就需要全部按照特有的校驗規(guī)則校驗。此處的修改過代表輸入框中的內(nèi)容和A中的內(nèi)容不一致,則視為修改,并且表單中2組和3組有兩個字段涉及到用戶隱私,不允許通過<input type="hidden">傳遞到前臺.且此校驗規(guī)則僅為前臺校驗,用于用戶是否需要進行校驗字段進行提交。

 移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

分析:(第一種開發(fā)人員很容易想到,能解決但是效率低且影響性能)

1.最開始考慮的是通過visualforce自帶的remoting方式提交這兩個字段,通過Visualforce.remoting.Manager.invokeAction提交到后臺指定的方法去比較A表記錄中的這兩個值,如果和B中相同則不用校驗2和3,如果有哪個不相同則在result中進行表單校驗處理。此種方式壞處為從校驗到提交需要請求兩次,影響性能。

2.將2組和3組涉及隱私的字段值通過某種加密或者簽名方式通過<input type="hidden"/>方式傳到前臺,前臺輸入框內(nèi)容以同樣規(guī)則的加密方法進行加密,此種加密方法不可逆,比較兩個加密值,如果相等,則說明A和B中的值相等,不需要修改相應(yīng)組塊。

做法:

此處參考的鏈接如下:

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庫對前臺的輸入框內(nèi)容進行加密,然后同隱藏于的A的字段進行比較

主要代碼:

1 var hash = CryptoJS.SHA1("前臺取到的dom元素對應(yīng)的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對應(yīng)的隱藏域的值比較便可以更加安全的保護用戶隱私同時解決用戶提出的問題。

總結(jié):此篇主要基于信息安全考慮實現(xiàn)前臺兩個sObject中相關(guān)字段校驗問題,主要用到的是Crypto類相關(guān)知識,詳情請查看對應(yīng)的類的API,篇中有錯誤地方歡迎指正,有不懂的歡迎留言。

作者:zero

博客地址:http://www.cnblogs.com/zero-zyq/

本文歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接

如果文章的內(nèi)容對你有幫助,歡迎點贊~

分類: salesforce&apex