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

时间:2013-12-11 19:00:12

标签: javascript jquery ajax security

我需要转义通过AJAX输出的文本。如果我将脚本提交到数据库,如<script>alert('hello world');</script>,则会在页面上执行弹出窗口。

这是我的功能,即设置数据,然后抓取要通过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;
});

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

您还应该在服务器存储之前验证服务器上的数据,并在将数据发布到服务器之前执行额外措施执行客户端验证。恕我直言,最好拒绝不良数据,而不是简单地逃避它。