是否需要对NodeJS和Express中发布请求的请求体进行净化/净化,以防止XSS攻击



我有一个网站,用户可以在输入框中输入内容并提交。提交后,数据会通过POST请求发送到我的服务器,并保存到我的数据库中。

然而,这些用户提交的输入也会发送回我的前端,供所有用户查看,并使用innerHTML加载。我的问题是,我是否需要净化/净化服务器上的那些输入假消息,以防止XSS攻击。我想这对在前端做没有帮助?如果是这样的话,如果你能帮我指出如何实现这一目标的正确方向,那就太好了?

前端:

// submit data
my_form.addEventListener("submit", async (e) => {
e.preventDefault();
await fetch('/post-data', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ input: my_input.value })
}).then(res => res.json())
});
// get data
async function load_data() {
const data_array = await fetch('/get-data');
data_array.forEach((data) => {
my_div.innerHTML += `<p>${data}</p>`;
});
}
load_data();

后端:

// * UserData is my mongoose schema as I am using mongoDB for my database, but thats besides the point.
router.post("/post-data", async (req, res) => {
await UserData.create({ data: req.body.input });
return res.json({ success: true });
});
router.get("/get-data", async (req, res) => {
const my_data = await UserData.find();
return res.json({ data: my_data });
});

您使用的是React或Angular这样的前端框架吗?在这种情况下,根据它们的文档,这两个框架都有内置的净化功能。请参阅React XSS指南:示例和预防以及角度安全

现在,如果您不使用框架,则需要清理后端或前端的输入。

我的建议:尽可能始终验证服务器端的输入。

是的,根据经验,您希望向客户端公开尽可能少的信息(类似于最小权限原则(。不要将数据库中不明确需要的数据公开给客户端。您希望最大限度地减少恶意人员获取可能用于危害应用程序安全的数据的可能性。

相关内容

  • 没有找到相关文章

最新更新