【发布时间】: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