我有一个开源客户端(用JavaScript编写的火狐插件)和一个服务器,其中包含了一些合理的用户信息:用户名和用户历史记录(全部来自YouTube)。客户端能够向历史添加新条目并查询完整的历史记录(通过告诉他的用户名)。通信在HTTP协议上。问题是,没有密码或任何身份验证。这意味着,通过创建假HTTP请求、修改GET数据并检索另一个用户的完整历史记录,任何人都可以假装成某人。
创建注册系统
我可以添加一个注册表单和一个登录表单,并将服务用户与YouTube用户联系起来进行某种验证,但这对用户来说太麻烦了。这实际上只是一个基本的服务,所以这将是一个过头。
Firefox插件不一定是开源的。通过关闭源,我可以做一个简单的技巧,比如创建一个由封闭源隐藏的salt散列函数(或者仅仅是散列的salt盐分)。这样,我就可以从用户名中生成一个密码。这里有两种选择:
a.)将其创建为C++ XPCOM组件。我试过了。但事实证明,这也是一种过度杀戮。它在壁虎版本之间非常不兼容,我甚至还没有跨平台编译它。调试非常困难,几乎没有任何支持,最重要的是:我不喜欢为每个平台的每个版本编译一个二进制代码块,只需将5行代码封装在一个300行的接口中。此外,如果我决定移植这个附加的Chrome呢?没有XP-COM这样的东西。
b.)让它成为一个模糊的JavaScript。我不知道如何编写难以破解的JS代码。简单地复制粘贴模糊代码、更改初始参数并为所需的用户名设置散列也容易得多。使用XPCOM组件很难工作,因此使用假用户名隔离并运行它,因此我几乎认为这是可接受的安全性:D。
(
获取密码
如果我可以从YouTube获得一个代码,那么我就可以很容易地获得用户名(在后台获取一个虚拟页面并从源代码中获取用户名),我将被保存。但我做不到。我不可能得到真正的密码,也许如果它被保存下来,我可以得到那样的密码,但我不能以此为基础。不管怎么说,我不需要真正的密码,只要它是一个秘密,它对用户来说是独一无二的,并且是用户常量的(每个用户都有一个,而且只有一个,随时可用)。
a.)我搜索了YouTube的源代码和嵌入式播放器的参数,发现了一些东西,但并不是秘密。它在个人资料的某个地方,我可以看到其他用户的代码。所以这意味着:我什么也没发现。
b.)我还检查了饼干。但是在重新登录之后,没有一个cookie值没有改变它的值。我并不能理解cookie做了什么。
所有这些的问题是..。他们太不专业了。我贴出这个问题是希望为这样的场景发明一些很酷的方法。握手之类的。
我需要这个,因为我得为我的附加服务写个服务条款。我不能只写在里面,我把你的历史保存到一个外部服务器上,这样你就可以在没有任何安全性的情况下在许多计算机上使用我的插件,任何下载Fiddler,并且知道HTTP协议是什么的人,都可以简单地查看您观看过的视频。
很抱歉这个问题太长了,如果话题不对的话也很抱歉(我希望不是这样)。
发布于 2012-04-02 14:01:12
无法以这样一种方式来实现这一点,即它是可管理的,并且具有有效的安全性。您必须使用HTTP (因此不能使用HTTPS),这使得保护系统免受MITM /重播攻击非常非常困难。直接从用户名生成散列并不能真正帮助解决MITM问题,并使系统暴露于暴力攻击中。
您只需生成一个随机值,将其存储在一个持久的cookie中,并将其用作会话标识符(实际上是一个密码代理),将其与第一次访问时的用户名匹配--这仍然容易受到XSS和MITM的攻击--但是,您还有一个额外的问题,就是如何重置用户密码。
你不能从youtube上获得youtube帐户密码--但是你可以从用户那里获得它以及youtube用户名,并测试它的有效性。
我认为您可能会做得比这里做的更糟糕--使用持久的会话id,根据openid或特定于应用程序的服务进行身份验证。(但请记住,这并不完全安全)。
https://security.stackexchange.com/questions/13369
复制相似问题