我正在使用 express-xss-sanitizer 包来清理 Node.js Express 应用程序中的传入请求。但是,我仍然看到 Checkmarx 报告的有关潜在 XSS 攻击的问题。我想知道在将响应数据发送给客户端之前是否需要对其进行清理。
我一直认为清理输入数据足以防止 XSS 攻击。然而,Checkmarx 的反复警告让我怀疑自己的理解。有人可以澄清我是否也需要清理响应数据吗?
[![charityApiRouter.get('/charity/getCampaigns', async (req, res) => {
const \[err, responseBody\] = await getCampaignData(req);
if (err) {
res.status(400).send({ success: false, err });
return;
}
res._end = true;
res.jsonp({
success: true,
data: responseBody.data,
});
});][1]][1]
您无需清理响应,因为响应是由您的应用程序代码使用提供的输入生成的。如果输入经过清理,响应也将是干净的(除非您的业务逻辑本身存在一些问题)。但你应该做的是发送你想要的确切数据。这意味着您应该发送您希望用户使用的特定字段,而不是直接发送数据对象(这很可能是数据库查询结果),例如:
res.json({
data: {
key1: value1,
key2: value2
} })
这确保用户只获得您期望他们获得的数据。如果您正在开发公共 api,这一点尤其重要。这样您也不会向客户端泄露任何不必要的元数据。