【问题标题】:Encoding an object instead of each property编码一个对象而不是每个属性
【发布时间】:2016-11-14 18:14:01
【问题描述】:

比赛很晚 -

我刚刚开始在我的网站上考虑 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 中 --- 有没有办法直接在参数上而不是在每个属性上简单地转义字符?

感谢您提供任何有用的提示。

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

【问题讨论】:

  • 我认为 jquery 实际上是为你做的
  • 为了安全起见,请在服务器端转义所有这些字符,而不是在客户端。在客户端转义它会使 XSS 更难,但它仍然是完全可能的,并不那么难。
  • @nicovank - 是的,非常好。所有端点也将受到保护。我只是将其作为一项附加措施,因为我认为 UI 应该对 XSS 采取一些措施。
  • @aw04 - 我的错,你是对的。当内容类型设置为 :application/x-www-form-urlencoded 时; charset=UTF-8 则 jQuery 将自动对所有表单数据进行编码。我会更新我的帖子。谢谢!

标签: javascript xss


【解决方案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(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2012-06-09
    • 1970-01-01
    • 2021-01-11
    相关资源
    最近更新 更多