Parse.com 应用遭到拒绝服务攻击
Denial of Service attack on Parse.com app
我正在编写一个小型 Web 应用程序,因为我正在学习使用 Parse.com 的功能。
因为 application_id 和 javascript_key 都是 public (如文档中所述),这意味着任何人都可以自由 运行 代码,如以下代码片段所示:
function sendRequest(){
var query = new Parse.Query(Parse.User);
query.find({
success: function(results) {
console.log("Request sucessful");
},
error: function(error) {
console.log("Request error: " + error.code + " " + error.message);
}
});
}
setInterval(sendRequest, (1000 / hitsPerSecond));
我认为它很容易导致 "DOS" 攻击 - 任何愿意关闭此应用程序的人只需要恢复 public 密钥并发送大量请求。
编辑 帐户有 request/s 限制,免费计划从 30 开始,但使用这个简单的脚本可以使任何订阅计划饱和。
考虑到这是正确的 - 有什么好的做法可以反对吗?有什么模式可以应用吗?
提前致谢,
是的,你的 Parse JavaScript 键是 public
它们必须在您的 JavaScript 文件中定义,这些文件可以公开访问。
并不是说你不能通过应用
的原则来隐藏你的密钥
隐蔽性安全 ;-)
您可以加密您的密钥并在您的 JavaScript 中放置 解密函数 。您可以通过将该函数隐藏在没人会喜欢的大型讨厌脚本的中间来进一步使其更难找到,然后 缩小您的 JavaScript (您应该这样做反正)。
我相信有可能达到 "more creative" 并达到一些合理的完美:-)
然而,原则上,有足够动机的黑客仍然有可能对您的程序进行逆向工程并获取密钥。你仍然可以让它变得足够困难,所以黑客可能会寻找更容易的目标,我们知道其中有很多;-)
通过设置正确的权限减少潜在危害
无论您是否应用了前面的原则,您的黄金法则应该是尽可能地加强您的 Parse(或与此相关的任何其他服务器)权限。
这将防止坏事发生,例如您的数据被破坏,这比 DoS 攻击更糟糕。
这仍然会允许任何知道您的密钥的人滥用它们 - 不仅是通过 DoS - 而且还有更令人不快的事情,例如将其他人的密钥签名为用户并向毫无戒心的受害者释放一连串确认电子邮件。并且由于您可能希望允许新用户签名,因此您无法真正保护自己免受这种滥用(上一段的 "methods" 除外)。
Parse自己的语句
几年前,我实际上在 Parse 论坛上问过这个问题,他们的回答是,如果发生这种情况,他们会对此进行调查。
最终想法
最后,假设您的站点业务至关重要,并且您不能等待 Parse 以防万一(这并不是说它们会很慢 - 我真的没有那种情况的经验)。
然后您可以做的是注册几个其他应用程序密钥以备后用,并保留您网站的副本,这样您就可以快速将用户转移到那里。或者只转移一部分。
我正在编写一个小型 Web 应用程序,因为我正在学习使用 Parse.com 的功能。
因为 application_id 和 javascript_key 都是 public (如文档中所述),这意味着任何人都可以自由 运行 代码,如以下代码片段所示:
function sendRequest(){
var query = new Parse.Query(Parse.User);
query.find({
success: function(results) {
console.log("Request sucessful");
},
error: function(error) {
console.log("Request error: " + error.code + " " + error.message);
}
});
}
setInterval(sendRequest, (1000 / hitsPerSecond));
我认为它很容易导致 "DOS" 攻击 - 任何愿意关闭此应用程序的人只需要恢复 public 密钥并发送大量请求。
编辑 帐户有 request/s 限制,免费计划从 30 开始,但使用这个简单的脚本可以使任何订阅计划饱和。
考虑到这是正确的 - 有什么好的做法可以反对吗?有什么模式可以应用吗?
提前致谢,
是的,你的 Parse JavaScript 键是 public
它们必须在您的 JavaScript 文件中定义,这些文件可以公开访问。
并不是说你不能通过应用
的原则来隐藏你的密钥隐蔽性安全 ;-)
您可以加密您的密钥并在您的 JavaScript 中放置 解密函数 。您可以通过将该函数隐藏在没人会喜欢的大型讨厌脚本的中间来进一步使其更难找到,然后 缩小您的 JavaScript (您应该这样做反正)。 我相信有可能达到 "more creative" 并达到一些合理的完美:-)
然而,原则上,有足够动机的黑客仍然有可能对您的程序进行逆向工程并获取密钥。你仍然可以让它变得足够困难,所以黑客可能会寻找更容易的目标,我们知道其中有很多;-)
通过设置正确的权限减少潜在危害
无论您是否应用了前面的原则,您的黄金法则应该是尽可能地加强您的 Parse(或与此相关的任何其他服务器)权限。
这将防止坏事发生,例如您的数据被破坏,这比 DoS 攻击更糟糕。
这仍然会允许任何知道您的密钥的人滥用它们 - 不仅是通过 DoS - 而且还有更令人不快的事情,例如将其他人的密钥签名为用户并向毫无戒心的受害者释放一连串确认电子邮件。并且由于您可能希望允许新用户签名,因此您无法真正保护自己免受这种滥用(上一段的 "methods" 除外)。
Parse自己的语句
几年前,我实际上在 Parse 论坛上问过这个问题,他们的回答是,如果发生这种情况,他们会对此进行调查。
最终想法
最后,假设您的站点业务至关重要,并且您不能等待 Parse 以防万一(这并不是说它们会很慢 - 我真的没有那种情况的经验)。
然后您可以做的是注册几个其他应用程序密钥以备后用,并保留您网站的副本,这样您就可以快速将用户转移到那里。或者只转移一部分。