我正在编写一个小型网络应用程序,因为我正在学习使用Parse.com的功能。
由于 application_id 和 javascript_key 都是公开的(如文档中所述),这意味着任何人都可以自由运行代码,如以下代码段所示:
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"攻击非常容易 - 任何愿意将此应用程序关闭的人只需要恢复公钥并发送大量请求。
编辑帐户有一个请求/限制,免费计划从30开始,但使用这个简单的脚本可以使任何订阅计划饱和。
考虑到这是正确的 - 对此有什么好的做法吗?任何适用的模式?
提前致谢,
答案 0 :(得分:1)
必须在JavaScript文件中定义它们,这些文件可以公开访问。
并不是说您不能通过应用
的原则来隐藏您的密钥您可以加密密钥并在JavaScript中放置解密功能。你可以通过将这个函数隐藏在一个没有人会喜欢的大型讨厌的脚本中间,然后缩小你的JavaScript (你应该做的事情)来进一步找到它。 我相信甚至可以“更有创意”并达到一些合理的完美: - )
但是,原则上,仍然可以让一个充满动力的黑客逆向工程你的程序并获得密钥。你仍然可以让它变得足够困难,所以黑客可能会寻找更容易的目标,其中有很多我们知道的目标; - )无论您是否应用了之前的原则,您的黄金法则应该是尽可能地收紧您的Parse(或任何其他服务器)权限。
这可以防止数据被破坏等坏事,这比DoS攻击更糟糕。
这仍然允许任何人知道你的钥匙滥用它们 - 不仅仅是DoS - 还有更令人不愉快的事情,例如将其他人作为用户签名,并向毫无戒心的受害者释放一连串确认电子邮件。由于您可能希望允许新用户签名,因此您无法真正保护自己免受此滥用行为(除了前一段中的“方法”)。
几年前,我实际上在Parse论坛上提出了这个问题,他们的回答是,如果发生这种情况,他们会调查一下。
最后,假设您的网站业务至关重要,如果实际发生这种情况,您无法等待Parse(这并不是说它们会很慢 - 我真的没有遇到这种情况)。
您可以执行的操作是注册其他几个应用程序密钥以备后备并保留您网站的副本,这样您就可以快速转移您的用户。或者只是转移其中一些。