使用AJAX请求转义数据的HTML

时间:2017-09-22 作者:user3438958

我遵循WP的延迟转义原则,但我不确定在处理ajax请求时何时转义HTML特殊字符。

注意,据我所知,在使用jQuery将数据设置到元素时.text() 方法,或使用createTextNode()`方法,它会自动转义文本内容。所以这个问题不适用于使用这些方法。

将文本内容设置为具有innerHTML属性或jQuery的元素时。html()方法在ajax请求之后,是用js转义文本内容更好,还是用js转义服务器端的文本内容更好esc_html()?

这里有两个例子,我不知道最好的是什么:

在发送到客户端之前退出服务器端:

// PHP

// Final stage of processing the ajax request (server side).
echo esc_html($text);
die();


//JS (jQuery)

// Final stage of a JS ajax request
success: function(response) {
    $(\'.example\').html(\'<div class="example">\' + response + \'</div>\'); // The response is already escaped
}
或者在ajax请求成功后使用JS转义:

// PHP

// Final stage of processing the ajax request (server side).
echo $text;
die();


//JS (jQuery)

/**
 * Example of my js html escape function
 */
function escapeHtml(unsafe) {
    return unsafe
         .replace(/&/g, "&amp;")
         .replace(/</g, "&lt;")
         .replace(/>/g, "&gt;")
         .replace(/"/g, "&quot;")
         .replace(/\'/g, "&#039;");
 }

//Final stage of a JS ajax request
success: function(response) {

    // Escape the untrusted data
    $(\'.example\').html(\'<div class="example">\' + escapeHtml(response) + \'</div>\'); // The response needs to be escaped
}
感谢您的帮助。

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

If it is not HTML, it does not need HTML escaping, if it is not JS, it does not need JS escaping.

所有转义都是基于上下文的。一般来说,您应该避免发送;“文本”;响应并重点发送以下数据:;“已转换”;直接通过domapi或jQuery提供的迂回方式进入相关的DOM结构。(换句话说,ajax响应应该针对机器,让终端机器将其转换为人类可读的内容)。

还有一些情况下,在响应中添加完整的HTML文本更方便。如果您朝这个方向走,转义应该与您在浏览器端如何处理它相关。jQuery的html() 需要有效的HTML,因此必须转义生成的HTML的文本部分。DOM API可能更宽容,因为它取决于上下文;“了解”;什么是HTML标记,什么是文本。

无论如何,我想不出任何一个例子,在其中,您必须在浏览器端进行转义。如果您陷入这种情况,您可能使用了错误的DOM/jQuery API。

直接对您的样本进行评论。第一个是错误的,因为如果文本包含HTML标记,您将逃避太多。

结束

相关推荐

无法获取PHP$_POST变量

我们正在使用一个定制的感谢页面,该页面旨在显示一个定制的小册子PDF,具体取决于将您发送到感谢页面的登录页面。在登录页上,我们使用了一个重力表单,它有一个重定向查询字符串house={embed_post:ID}:这很好用。例如,从一个登录页,提交表单需要http://www.rossnorthhomes.com.au/thank-you/?house=3466感谢页面模板为:<?php /** * Template Name: Thank You Page (Custom Tem