Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中定义可以包含任何字符的字符串?_Javascript_String_Passwords_Salesforce_Visualforce - Fatal编程技术网

如何在JavaScript中定义可以包含任何字符的字符串?

如何在JavaScript中定义可以包含任何字符的字符串?,javascript,string,passwords,salesforce,visualforce,Javascript,String,Passwords,Salesforce,Visualforce,即使我在JavaScript中使用了Salesforce变量,也不必知道Salesforce来回答我的问题。我想访问一个密码字段。我可以通过在JavaScript中使用Salesforce变量{!Account.Password\uuu c}来实现这一点,如下所示: var p = '{!Account.Password__c}'; 我已经用了很长一段时间了,但是在有些情况下它不起作用。唯一的问题是密码可能包含任何字符(好的密码应该包含任何字符)。因此,如果它包含一个引号,那么这个JavaSc

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

var p = '{!Account.Password__c}';
我已经用了很长一段时间了,但是在有些情况下它不起作用。唯一的问题是密码可能包含任何字符(好的密码应该包含任何字符)。因此,如果它包含一个引号,那么这个JavaScript将不会运行。我可以用双引号写:

var p = "{!Account.Password__c}";
但它也可能包含一个双引号。它还可以包含正斜杠和/或反斜杠

密码字符串需要能够执行以下任一操作:
我不知道

传递“单词”

/-\\\\\\\\\)\u/-\\\\\/\

“!@#

+*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');

你的问题是转义。你可以反斜杠字符串中的任何字符-所以如果你有,比如说,
owow'!thisishard
作为密码,要将其直接分配给JS var,您可以执行以下操作:

var p = "owowow\"\'!thisishard";
这是关于逃跑的。如果您从另一个源(例如,通过
元素.value
获取文本元素)获取变量,则需要执行此操作

这并没有解决几个问题:

  • 通过GET params传递密码在OWASP指南中是非常重要的,这是不可执行的。原因是,除了通过常规方式可以嗅探之外,它们还会出现在服务器日志上
  • 你到底为什么要这样做

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

    var p = '{!JSENCODE(Account.Password__c)}';
    
    如果您的Javascript位于HTML标记中(例如:在“onclick”属性中),则使用JSINHTMLENCODE函数,该函数将对字符进行HTML编码


    这些都记录在参考中。

    如果要将其直接输入JavaScript,必须从后端处理它。但是为什么您要在GET请求中发送密码和用户名呢。这很糟糕。这就像把你家的钥匙贴在你的前门上。事实上,回答这个问题需要了解Salesforce,因为它必须是一种Salesforce机制,允许字符串在注入JavaScript代码之前被清除。在ASP.NET中,等效的问题是如何设置
    foo
    ,以便
    var p='
    foo
    的任何值都有效。答案是在生成页面之前,对
    foo
    服务器端进行必要的转义。Salesforce大概有一个类似的服务器端清理机制。我认为你不能完全从客户的角度来做这件事。这只是我公司内部使用的。实际上拥有密码的客户没有看到或使用此密码。说真的,我没有想到这个。这就是我在公司开始工作时的情况。这就是我必须处理的。@burkybang:我的评论并不是有意冒犯。(旁注:我们可以知道公司的名称,这样我就知道谁不应该申请了吗?:-P不使用它的客户不会改变任何事情。你仍然会有服务器日志。一旦有人得到它,他们就拥有所有的密码。而且不需要客户这样做——一个不满的员工、看门人——或者有人贿赂看门人是的,我同意。。。我们将改变我们的整个系统,所以这个问题将得到解决,但还没有解决。