1

即使我在我的 JavaScript 中使用 Salesforce 变量,也不必知道 Salesforce 来回答我的问题。我想访问一个密码字段。我可以通过{!Account.Password__c}在我的 JavaScript 中使用 Salesforce 变量来做到这一点,如下所示:

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

我已经使用了很长时间,但是在某些情况下它不起作用。唯一的问题是密码可以包含任何字符(作为一个好的密码应该)。所以如果它包含一个单引号,那么这个 JavaScript 将不会运行。我可以用双引号写它:

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

但它也可以包含双引号。它还可以包含正斜杠和/或反斜杠。

密码字符串需要能够采用以下任何一种:
Idon'tknow
pass"word"
/-\_|)_/-\_/\/\
"'!@#
+*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');
4

2 回答 2

2

您正在寻找的是 JSENCODE 函数。它将转义引号、反斜杠和任何其他可能会弄乱您的 Javascript 字符串的内容。

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

如果您的 Javascript 在 HTML 标记中(例如:在“onclick”属性中),则使用 JSINHTMLENCODE 函数,该函数将对字符进行 html 编码<&>

这些都记录在Visualforce 函数参考中。

于 2013-05-17T16:26:28.820 回答
0

你的问题是逃跑。您可以反斜杠字符串中的任何字符 - 因此,如果您有owowow"'!thisishard密码,例如,将其直接分配给 JS var,您可以这样做:

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

处理逃逸。如果您从其他来源(例如,通过 的文本元素)获取了变量,则无需执行此操作element.value

这并没有解决几个问题:

  1. 通过 GET 参数传递密码在 OWASP 指南中非常重要。原因是它们除了可以通过传统方式嗅探外,还会出现在服务器日志中。
  2. 你到底为什么要这样做?
于 2013-05-17T14:03:11.423 回答