简而言之,我的问题是:“我如何验证哪些客户端消息来自我的代码,哪些来自黑客?”
我已经阅读了很多有关Javascript注入的文章,并在StackOverflow上阅读了很多答案。不幸的是,总是给出的答案是“永远不信任客户,总是对请求进行身份验证”。听起来像是很好的建议,但我不知道如何将其应用于我的情况。我试图关闭我的服务器端代码的所有客户端访问点,但是我仍然有一个,并且我需要一些保护它的帮助。这是我的情况:
然后,客户端使用查询和键码向www.storage.com发出GET请求。我在main_site.com客户端中的代码如下:
$.get("http://www.storage.com/make_code", function (location) {
socket.emit("get_code", location, function (code) {
$.get("http://www.storage.com/do_stuff?input="+input+"&code="+code, function (response) {
//here I do whatever with the response
}
}
}
我知道这段代码有很多错误,但是我修补了很多漏洞。通过使用CORS策略以及其他补丁程序,我已经使www.storage.com仅接受来自www.main_site.com的请求。主要是,我看到的最后一个大漏洞是我现在要解决的一个漏洞,该漏洞是使用在Chrome或Firefox上的开发工具插入JS的人,该JS将调用所有这些漏洞并模拟一个真实的调用。如何在此处实施服务器端身份验证?我并不特别介意有人调用第一个$ .get,因为它只会生成一个代码并返回其在数据库中的位置。我将多余的用于测试目的。但是,一旦他们调用了socket.emit,他们就可以做任何他们想做的事情。我有什么选择,也许可以举一个例子,说明如何在JavaScript或Python中实现您的建议(www.storage.com在Python中)。谢谢!
-编辑- 现在,我可以转到Chrome开发者工具控制台并完全输入上面的代码来入侵自己的网站。我无法阻止其他人这样做,那么通常使用哪些验证技术?
答案 0 :(得分:1)
您必须确保与main_site.com的随机用户共享的资源不敏感。如果您想只允许某些用户访问storage.com上的某些数据X,则他们必须提供一些凭据Y。然后将Y映射到X,并检查每次调用是否一切正常。
不能不能让js单独提供这些凭据,必须暗含用户。
Js调用main_site.com后端。它通过安全通道(您可以使用长共享令牌和https)从storage.com检索数据。
main_site.com然后仅向前端提供有用的|不敏感|预处理的数据
答案 1 :(得分:1)
-编辑-现在,我可以转到Chrome开发者工具控制台并完全输入上面的代码来入侵自己的网站。
这就是残酷的事实……您可以使其很难被黑客入侵,但您不能使其成为不可能!!!
对于Web应用程序而言,这是正确的,对于移动应用程序而言,已经存在一种解决方案,但是一旦超出您的情况,我就不会对此进行深入研究。
我无法阻止其他人这样做,那么常用的验证技术有哪些?
您可以阅读this series的 有关移动Api安全技术的文章,以了解如何实现和绕过它们。本文更多地是针对移动应用程序的API的上下文,但是其中提到的大多数技术也可以在Web应用程序中应用。