node.js - 如何在 Express.js 中执行同源策略?

标签 node.js security rest express

假设我有以下 URL 路由:

app.post('upvote', function(req, res) {
  // make a database a call to increase vote count
});

如何防止其他人打开控制台并在 www.mysite.com/upvote 上发送 AJAX POST 请求?我希望它只允许 www.mysite.com 发出该 POST 请求,而其他任何人都不能。

最佳答案

What can I do to prevent others from opening up a console and sending AJAX POST request

谁是“其他人”?

如果其他人==网站的用户...您无法阻止他们使用 JavaScript 控制台或任何其他方式发送他们喜欢的任何请求。你不能信任客户端,所以你必须有服务器端授权:要求用户登录到一个帐户,并注册该帐户已投票,因此不能再次投票。

如果 others==admins of other sites (by serving script to their users that causes submission to your site)... 另一个站点上的 JavaScript 不可能引起 AJAX POST 请求,或者至少不会,除非你故意选择使用 CORS .但是他们很可能通过简单地创建一个 <form> 来引发 POST。指向您的地址并提交。

这是经典Cross Site Request Forgery问题。广泛接受的 XSRF 问题解决方案是在每个 POST(表单或 AJAX)提交中包含一个 secret token 作为参数。该 secret token 与用户的登录状态相关联,或者存储在服务器端 session 中,或者复制到客户端 cookie 中。无论哪种方式,来自另一个站点的攻击者都无法获得对登录用户有效的 token ,因此他们无法伪造请求。

您需要对具有直接影响的所有操作进行 XSRF 保护,无论是 AJAX 还是基于表单的 POST。

关于node.js - 如何在 Express.js 中执行同源策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17189572/

相关文章:

javascript 仅显示 for 循环的最后一次迭代的输出,其中包含 Promise 对象

javascript - "newListener"事件未触发

c# - 安全代码生成/比较和原子钟

security - 如何确保 http 请求来自特定位置?

java - 有没有办法使用私钥从签名数据中获取纯文本?

java - Jersey API 中的 multipart/form-data 出现 CORS 错误

javascript - 如何处理来自函数的 socket.emit() 数据?

node.js - Loopback.io 的 ACL 问题

java - 我们可以使用 JDBC 在 Android 中连接远程 MySQL 数据库吗?

web-services - 是否有模拟 Web 服务(REST 和 SOAP)进行测试的工具?