转义 Qualtrics 管道文本以在 javascript 中使用(更一般地说,如何安全地转义用户生成的文本)

Escaping Qualtrics piped text for use in javascript (more generally, how to safely escape user-generated text)

提问人:octern 提问时间:12/3/2014 更新时间:4/23/2021 访问量:1397

问:

在我的 Qualtrics 调查中,我有一个自由回答(文本框)问题。我想将这个问题的答案变成javascript,这样我就可以做一些复杂的文本处理并将结果发布到外部页面。

看起来 Qualtrics 的官方方法是使用管道文本代码:

var answer = "${q://QID1/ChoiceTextEntryValue}"

但这会生成 javascript 代码,并将文字响应插入到代码中。如果调查对象在他们的回答中加上引号,就会破坏代码。我还验证了它可用于注入任意javascript!

有没有办法安全地将用户生成的值分配给变量?

我尝试过:

  • 如果有一个 API 调用将响应直接放入 javascript 变量中,而不必使用管道文本,那就太好了。我检查了他们的 API 文档并与技术支持进行了交谈,看起来不存在这样的功能。
  • 如果 Qualtrics 有一个内置的字符替换功能,我可以用它来去除引号,那也会很有帮助,但我认为它没有。
  • 我可以使用响应验证来防止受访者提交包含引号的响应。这是我想出的唯一可行的解决方案,但对用户来说会很烦人。
JavaScript 安全性 转义 Qualtrics

评论

0赞 Gordon McDonald 2/22/2021
我也有这个问题。我想要一个解决方案。目前,我正在使用响应验证来防止用户输入引号,这很愚蠢。

答:

0赞 Gordon McDonald 2/23/2021 #1

我来晚了一点,但通过遵循此支持票,我能够获得如下问题响应文本:

Qualtrics.SurveyEngine.addOnPageSubmit(function()
{

/* Get current question ID (e.g. 'QID10') */
var qid_str = this.questionId;

/* console log to check what ID was capture (you can comment this line)*/
console.log('Question is: QR~' + qid_01_str)

// Save the current question's response value QR~QID247~TEXT
var responseTextField = document.getElementById('QR~' + qid_str);
var currentResponse = responseTextField.value;

/* console log to see what was captured (you can comment this line too)*/
console.log('response text is: ' + currentResponse)

});

这解决了我自己的问题,即管道文本中的双引号会破坏东西。希望它能帮助其他像我这样有这个问题的 SO 考古学家!

评论

0赞 Andrew 2/24/2022
你能用通俗易懂的语言解释一下这是做什么的吗?什么是“逃生角色”?例如:将所有 ~ 字符替换为两个 ~ 字符,然后将所有 “ 字符替换为一个 ~ 字符(就像在各种数据通信协议中所做的那样——避免 ~ 与 ” 歧义)。
0赞 Rodp 4/23/2021 #2

又有点晚了 - 也许你已经继续前进或找到了解决方案?您能否确认您正在谈论在 Javascript 中操作文本字符串(无论是来自调查中的文本框还是通过联系人列表上传导入)?如果是这样,我刚刚在这里遇到了一些很好的信息,如何在 JavaScript 中使用字符串,其中谈到了使用反引号而不是单引号或双引号来包裹管道文本。然后,这允许按字面意义使用/记录字符串,并考虑字符串中的撇号和双引号。

所以而不是:var answer = "${q://QID1/ChoiceTextEntryValue}"

将双引号替换为反引号。恐怕我不能在这里发布它,因为这里的代码工具使用反引号!!

评论

0赞 Andrew 2/24/2022
这并不总是有效,因为您将无法区分反引号和双引号