假设我有以下 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/