2013-05-17 63 views
1

儘管我在JavaScript中使用Salesforce變量,但無需知道Salesforce來回答我的問題。有一個我想訪問的密碼字段。我可以使用Salesforce的變量,{!Account.Password__c}做到這一點,我的JavaScript裏面像這樣:如何在JavaScript中定義可包含任何字符的字符串?

var p = '{!Account.Password__c}'; 

我一直在使用這種很長一段時間,但也有一些情況下,它不能正常工作。唯一的問題是密碼可能包含任何字符(作爲一個好的密碼應該)。所以如果它包含一個單引號,那麼這個JavaScript將不會運行。我可以用雙引號將它寫出:

var p = "{!Account.Password__c}"; 

但它也可以包含雙引號。它也可能包含正斜槓和/或反斜槓。

密碼字符串需要能夠採取任何這些:
Idon'tknow
pass"word"
/-\_|)_/-\_/\/\
"'[email protected]#
+*co/rn

這是我的代碼:

var u = '{!Account.Email_Address__c}'; 
var p = escape(encodeURIComponent('{!Account.Password__c}')); 
window.open('http://mywebsite.com/?&u=' + u + '&p=' + p,'_blank'); 
+1

如果您想直接將其提供給JavaScript,您必須從後端處理它。 *但爲什麼你會發送密碼和用戶名在GET請求。這是壞的壞事。這就像是把你的房門鑰匙粘在你的前門上。 – epascarello

+1

事實上,爲了回答這個問題,需要了解Salesforce的知識,因爲它必須是一個Salesforce機制,允許在注入JavaScript代碼之前清理字符串。 – Pointy

+0

在ASP.NET中,等價的問題是如何設置'foo',使'var p ='<%= foo %>''適用於任何'foo'的值。答案是在生成頁面之前,對'foo'服務器端進行必要的轉義。 Salesforce推測具有類似的服務器端清理機制。我不認爲你完全可以做到客戶端。 –

回答

2

您正在尋找的是JSENCODE功能。它會逃避引號,反斜槓和其他可能會擾亂你的Javascript字符串的東西。

var p = '{!JSENCODE(Account.Password__c)}'; 

如果你的Javascript是一種HTML標籤內(例如:在加入「onClick」屬性),然後使用JSINHTMLENCODE功能,這將HTML編碼字符<&>

這些記錄在Visualforce Functions參考文獻中。

+0

非常感謝!這工作像一個魅力。 – burkybang

0

你的問題是逃跑。您可以反斜線字符串的任何字符 - 所以如果你有,比如說,owowow"'!thisishard作爲密碼,將其分配直線上升到一個JS變種,你可以這樣做:

var p = "owowow\"\'!thisishard"; 

與轉義交易。你做而不是如果你已經從另一個來源獲取變量(例如,通過element.value的文本元素),就需要這樣做。

這並不reove幾個問題:

  1. 通過GET PARAMS傳遞密碼是對的事情做OWASP準則相當高了。原因是除了通過常規手段可以窺探之外,它們還會顯示在服務器日誌中。
  2. 你爲什麼要這樣做?
+0

這僅供我公司內部使用。實際擁有密碼的客戶沒有看到或使用此密碼。 嚴重的是,我沒有想出這個。這是我入職公司時的情況。這是我必須與之合作的。 – burkybang

+1

@burkybang:我的評論並不意味着冒犯。 (注意:我們可以有公司名稱,所以我知道誰不應該申請?:-P不使用它的客戶不會改變一件事情,你仍然會有服務器日誌。他們擁有所有的密碼,而且它不需要客戶這樣做 - 一個心存不滿的員工,看門人 - 或者賄賂看門人的人...) –

+0

是的,我同意...並且我們將改變我們的整個系統,所以這個問題將得到解決,但尚未解決。 – burkybang

相關問題