對(duì)于一個(gè)項(xiàng)目來說,除了穩(wěn)定性以及健壯性以外,還需要有較好的安全性,此篇博客簡(jiǎn)單描述salesforce中關(guān)于安全性的一點(diǎn)小知識(shí),特別感謝公司中的nate大神和鵬哥讓我學(xué)到了新得知識(shí)。
項(xiàng)目簡(jiǎn)單背景:
假設(shè)有兩個(gè)sObject,分別是A和B。B是A的子sobject。表單中元素顯示的是B的相關(guān)字段,這些字段A中也全部包含。表單中包含了9個(gè)元素,點(diǎn)擊提交的時(shí)候需要分成4組校驗(yàn),每一組中只要有一個(gè)元素修改過,此組元素就需要全部按照特有的校驗(yàn)規(guī)則校驗(yàn)。此處的修改過代表輸入框中的內(nèi)容和A中的內(nèi)容不一致,則視為修改,并且表單中2組和3組有兩個(gè)字段涉及到用戶隱私,不允許通過<input type="hidden">傳遞到前臺(tái).且此校驗(yàn)規(guī)則僅為前臺(tái)校驗(yàn),用于用戶是否需要進(jìn)行校驗(yàn)字段進(jìn)行提交。
分析:(第一種開發(fā)人員很容易想到,能解決但是效率低且影響性能)
1.最開始考慮的是通過visualforce自帶的remoting方式提交這兩個(gè)字段,通過Visualforce.remoting.Manager.invokeAction提交到后臺(tái)指定的方法去比較A表記錄中的這兩個(gè)值,如果和B中相同則不用校驗(yàn)2和3,如果有哪個(gè)不相同則在result中進(jìn)行表單校驗(yàn)處理。此種方式壞處為從校驗(yàn)到提交需要請(qǐng)求兩次,影響性能。
2.將2組和3組涉及隱私的字段值通過某種加密或者簽名方式通過<input type="hidden"/>方式傳到前臺(tái),前臺(tái)輸入框內(nèi)容以同樣規(guī)則的加密方法進(jìn)行加密,此種加密方法不可逆,比較兩個(gè)加密值,如果相等,則說明A和B中的值相等,不需要修改相應(yīng)組塊。
做法:
此處參考的鏈接如下:
1.https://developer.salesforce.com/page/Apex_Crypto_Class
2.https://github.com/sytelus/CryptoJS
1.apex端:controller端對(duì)兩個(gè)字段值進(jìn)行加密,加密可以選擇很多加密模式,這里選擇使用sha1方式,主要用到的