论坛被跨站了?怎么又字数有问题了 orz
发布于 11 年前 作者 phoenixlzx 5021 次浏览 最后一次编辑是 8 年前

发现用户 loveshell 的头像似乎有问题啊。

http://cnodejs.org/user/loveshell

actionbox 这啥的网站不应该是 gravatar 么…

18 回复

头像可以随意设置

@suqian 我现在一访问论坛就弹出窗口要求输入用户名密码…

@phoenixlzx 可能是为了安全吧

@ym1623 于是你看看要求输入用户名密码的那个地址,是 cnode 么?

我是看了源码来反馈的,要是觉得我毫无根据那就当我没说。

@phoenixlzx 该用户的头像地址是 http://ssh1-42382.apne1.actionbox.io:8080/ ,而当浏览器请求这个URL时,对方服务器响应要求进行HTTP认证,故浏览器会弹出一个窗口来让你输入用户名和密码。 就这个情况而言,目前似乎没办法解决。

@leizongmin 所以为什么用户上传外站数据的时候程序没有进行检查?

@phoenixlzx 这个是浏览器来处理的事情,比如我现在用的Chrome浏览器就没有出现这种情况,而在IE下浏览就弹出了该窗口。

@phoenixlzx 首先,它不是用户上传数据,而是用户填写自己的头像URL,目前cnodejs是没办法解决这个 检查 问题的,只能 一刀切 禁止用户使用站外的URL做头像。

@leizongmin 浏览器处理个鬼啊,我是说既然允许用户上传外站数据作为自己头像为什么在保存的时候不对用户输入的数据做检查?至少应该保存的时候尝试请求这个东西然后检查MIME类型看看是不是图片吧。

这只是个basicAuth的请求,如果是脚本呢?

@leizongmin … 好吧,就把这个说成允许用户提交数据好了。

@phoenixlzx 被你提醒了:在用户修改了头像的URL时,后台自动抓取该URL,并保存到cnodejs.org的服务器上,将该URL重设为在cnodejs.org上的URL(保证头像的URL是在cnodejs可以控制的域名之下)。

@leizongmin 建议不要保存到cnode服务器上,除非cnode不愁带宽和硬盘。保存在CDN上也可以,但是我觉得更好的方案是把这个东西下载回来做MIME检查。对于头像来说肯定只允许是 jpg/png/gif 格式图片,甚至gif都不允许,因为gif有很简单的办法插入脚本。

@leizongmin cnode 竟然还不能编辑自己的回复…

上个回复没说完。仅仅把链接请求回来做检查就可以了,不用保存在自己服务器上。一来消耗带宽和资源,二来一旦有漏洞被绕过了,对用户造成影响的话cnode很可能会被列入浏览器厂商的黑名单。

@phoenixlzx 1、在图片文件中插入脚本是没法直接运行的,对方还必须能够创建一个script标签,而如果对方能创建一个script标签,也就用不着把恶意代码插在图片文件里面了(何必 脱裤子放屁 ); 2、如果只是保存URL的时候验证一下URL是否为图片,因为域名和远程服务器不受自己控制,对方完全可以在刚开始的时候返回一个有效的图片,待cnodejs验证完之后,再悄悄地修改服务器端的响应,它完全可以返回任意内容(采用这种方法来检查实际上是 掩耳盗铃 ); 3、cnodejs的图片文件实际上是会保存在七牛的云存储空间上的,所以带宽和硬盘不是问题。最大的问题是,如何避免恶意填写一些超大文件的URL;

@leizongmin 那么按你说的 1 2 都没有问题,3也自然就不是问题了。既然可以保存在本地,那么完全可以在后台把文件下载回来,然后检查文件长度。

但是说了这么多,为什么不直接提供头像上传的功能?

@phoenixlzx 估计当时就是为了写程序的时候简单嘛(最开始时只有自动从gravatar上获取头像,使用站外URL做头像都是别人发pull request才有的)。如果没有一些 “坏人” 出现,谁想把东西搞得这么复杂呢

@leizongmin orz 表示程序肯定从简单开始后面慢慢成熟起来嘛。

不过想做的通用一点,还是考虑周全些比较好。

回到顶部