假设我有以下网址:
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请求而不允许其他人。
答案 0 :(得分:4)
我该怎么做才能阻止他人打开控制台并发送AJAX POST请求
谁是“其他人”?
如果其他人= =该网站的用户......您无法阻止他们使用JavaScript控制台或任何其他方式发送他们喜欢的任何请求。您无法信任客户端,因此您必须拥有服务器端授权:要求用户登录帐户,并注册该帐户已投票,因此无法再次投票。
如果其他人= =其他网站的管理员(通过向其用户提供导致提交到您网站的脚本)...其他网站上的JavaScript无法导致AJAX POST请求,或者至少不会你有意使用CORS选择加入。{但是他们很可能只需创建一个<form>
指向您的地址并提交它就可以发布POST。
这是一个经典的Cross Site Request Forgery问题。广泛接受的XSRF问题解决方案是在每个POST(表单或AJAX)提交中包含一个秘密令牌作为参数。该秘密令牌与用户的登录状态相关联,可以是存储在服务器端会话中,也可以是复制在客户端cookie中。无论哪种方式,来自其他站点的攻击者都无法获取对登录用户有效的令牌,因此他们无法伪造请求。
对于直接影响的所有操作,无论是AJAX还是基于表单的POST,都需要XSRF保护。
答案 1 :(得分:2)