Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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 何时转义使用AJAX发送的数据_Javascript_Jquery_Ajax_Security - Fatal编程技术网

Javascript 何时转义使用AJAX发送的数据

Javascript 何时转义使用AJAX发送的数据,javascript,jquery,ajax,security,Javascript,Jquery,Ajax,Security,我需要转义通过AJAX输出的文本。如果我向数据库提交脚本,比如alert('helloworld'),然后在页面上执行弹出窗口 这是我的函数,它设置数据,然后获取通过AJAX发送的数据 function add_order() { if($_SERVER['REQUEST_METHOD'] == "POST") { $add_order = $this->order_model->set_order($_POST['text']); if($a

我需要转义通过AJAX输出的文本。如果我向数据库提交脚本,比如
alert('helloworld'),然后在页面上执行弹出窗口

这是我的函数,它设置数据,然后获取通过AJAX发送的数据

function add_order() {
    if($_SERVER['REQUEST_METHOD'] == "POST") {
        $add_order = $this->order_model->set_order($_POST['text']);
        if($add_order==false){
            echo "fail";
            return false;
        }
        $order_data = $this->order_model->get_order_by_id($add_order);
        echo json_encode($order_data);
        return true;
    }
}
Jquery代码:

$('#create_order').submit(function(){
        $.post('/order/add_order/', $('#create_order').serialize(), function(data){
            var obj = $.parseJSON(data);
            var obj_item = obj[0];
            $('tr.'+obj_item.id).append("<td>" + obj_item.text + "</td>");
            msg('success', 'Part #'+obj_item.number+' has been successfully created');
        });
    }
    return false;
});
$('create#u order')。提交(函数(){
$.post('/order/add_order/',$('#create_order').serialize(),函数(数据){
var obj=$.parseJSON(数据);
var obj_item=obj[0];
$('tr.+obj_item.id).append(“+obj_item.text+”);
msg('success'、'Part#'+obj_item.number+'已成功创建');
});
}
返回false;
});

如何阻止obj_item.text执行脚本?

您需要构建DOM元素并设置文本,而不是构建HTML:

$("<td />", { text: obj_item.text }).appendTo('tr.tr.' + obj_item.id);
$(“”,{text:obj_item.text}).appendTo('tr.tr.+obj_item.id);

如果提交的数据只能包含纯文本,请确保使用
.text()
将其重新插入DOM-使用
.text
将防止任何嵌入的标记呈现为HTML或由浏览器处理


您还应该在存储数据之前验证服务器上的数据,并在将数据发布到服务器之前执行客户端验证。嗯,拒绝坏数据总比逃避坏数据好。

从我在这些论坛上读到的内容来看,大家似乎一致认为应该将数据插入数据库raw@Slaks我所说的“净化”是指检查合规性,如果不可接受就拒绝——而不是默默地“清理”它。这样就没有用了;您仍然需要转义。请使用[0].innerHTML而不是.append()@dandavis:这没有帮助。@SLaks:为什么没有帮助?innerHTML不执行脚本标记,而html()、append()、load()和friends“有益地”评估动态脚本标记…@dandavis:
,而不是重新构造我构建DOM的方式(尽管我知道你告诉我这样做的方式是正确的——只需要做大量工作即可),有没有办法将我当前的结构解析为文本?类似于这样做:$('tr.+obj_item.id).append(“+obj_item.text.text()+”);这叫做HTML转义。没有内置的方法,但您可以自己编写:
返回$('',{text:text}).html()
为什么要使用
$(“”,
而不是
$(“”,
?@qwertynl:IIRC,
$(元素字符串)
必须格式正确。@SLaks否。您的格式根本不正确。您甚至可以使用
$(“”,
)。