我正在完全基于parse-server创建一个vue单页应用程序,并使用其javascript sdk在客户端进行数据处理。对于登录/注册,我正在使用Parse.User.logIn / signUp并使用javascript密钥进行身份验证。
现在,登录浏览器后,正在使用installationId和sessionToken将rest api请求发送到parse-server。没关系,但是如果有任何用户决定创建一个机器人以用垃圾数据填充解析服务器怎么办?我检查了使用/复制这些安全性令牌/密钥后,可以通过将其余api请求发送到解析服务器来轻松创建对象。我可以阻止创建类,但是如何防止从其他媒介重用会话令牌?
答案 0 :(得分:2)
如果攻击者可以访问JavaScript密钥,则他可以执行vue应用程序可以执行的任何操作。他甚至不需要会话令牌。
您所描述的是Dos攻击。仅当攻击者可以在服务器上产生高负载而不自己产生高负载时,Dos攻击才有效。就您而言,也许可以生成许多对象,但他将无法使您的服务器超载(除非他具有比您更大的处理能力)。
此外,如果只想保持数据库干净,则可能希望限制创建用户,因此仅使用JavaScript密钥是不可能的。这样,您就只能将访问权限授予您信任的用户。问题在于它无法扩展。
此难题不是Parse Server所特有的。大多数Web应用程序通过不信任客户端并将其操作限制在特定表中来解决此问题,就像Parse Server中的CLP(类级别权限)一样。
答案 1 :(得分:0)
禁用使用CLP在表上创建权限。
https://docs.parseplatform.org/parse-server/guide/#class-level-permissions
有了更多信息,这可以更好地满足您的需求:
Parse.Cloud.beforeSave('Article', (req, res) => {
let article = req.object;
if( object.isNew() ) {
let query = new Parse.Query('Article');
let 5MinsAgo = //Calculate date
query.greaterThan('createdAt', 5MinsAgo).equalTo('Author', article.get('Author');
return query.count().then(
count => {
if( count > max_allowed_count ) res.error('You've created too many articles.');
else res.success();
}
);
}
else res.success(); //Or any other validation
});
您仍然可以从用户中删除创建权限,而是让他们将数据发送到云,然后在此处进行验证。这通常是一个很好的一揽子安全策略,因为它在客户端上留下的漏洞少得多。您还可以禁用查找权限,并通过云功能进行所有查询。这些东西混淆了您后端的逻辑,这很好。
答案 2 :(得分:0)
所有答案都是有效的。有很多方法可以缓解这类问题。
您还可以使用要求身份验证类级别的权限(https://docs.parseplatform.org/parse-server/guide/#class-level-permissions)
您可以在负载平衡器和解析服务器之间放置一些跟踪,以跟踪客户机通过IP,会话令牌等发出的请求...,如果您认为这些请求是欺诈性的,则可以阻止这些请求像nginx https://www.nginx.com/blog/rate-limiting-nginx/
这样的限速代理还有许多其他可能性,其中大多数适用于任何类型的Web应用程序。
您应该永远记住: