编码对象而不是每个属性

时间:2016-11-14 18:14:02

标签: javascript xss

游戏很晚 -

我刚刚开始在我的网站上考虑XSS。不幸的是,在几个地方我创建了通过Ajax传递的对象:

var params = {};
params.firstName = $("#firstName").val();
params.lastName = $("#lastName").val();

$.ajax({url:url, data:params}).done();

任何人都可以用可执行文件JS编写。现在,根据我的阅读,我可以通过这样做轻松解决这个问题:

var params = {};
params.firstName = encodeURIComponent($("#firstName").val());
params.lastName = encodeURIComponent($("#lastName").val());

$.ajax({url:url}, data:params).done();

但是我没有经过每个地方创建一个对象并在encodeURIComponent中包装每个字段---有没有办法直接在params而不是每个属性上转义字符?

感谢任何有用的提示。

更新:当Content-Type:application / x-www-form-urlencoded; charset = UTF-8然后表单数据自动编码。

1 个答案:

答案 0 :(得分:-1)

这样的事情会起作用:

function encodeParams(data) {
    Object.keys(data).forEach(function(key) {
        data[key] = encodeURIComponent(data[key]);
    });

    return data;
}

您可以这样使用:

var params = encodeParams({
    firstName: $('firstName').val(),
    lastName: $('lastName').val()
});

ajax(...)