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



我需要转义通过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执行脚本?

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

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

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

您还应该在存储数据之前验证服务器上的数据,并在将数据发布到服务器之前执行客户端验证以获得额外的措施。IMHO,拒绝坏数据比简单地逃离它要好。

最新更新