我需要转义通过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执行脚本?
答案 0 :(得分:2)
您需要构建DOM元素并设置文本而不是构建HTML:
$("<td />", { text: obj_item.text }).appendTo('tr.tr.' + obj_item.id);
答案 1 :(得分:0)
如果提交的数据只能包含纯文本,请确保使用.text()
将其重新插入DOM中 - 使用.text
将阻止任何嵌入式标记呈现为HTML或其他由浏览器处理。
您还应该在服务器存储之前验证服务器上的数据,并在将数据发布到服务器之前执行额外措施执行客户端验证。恕我直言,最好拒绝不良数据,而不是简单地逃避它。