UCenter用户头像的存储规则 转

之所以关注这个问题,是因为某论坛一打开某个页面MSE就报毒,而且每次都是同一个头像文件:xx_avatar_middle.jpg (xx是数字),当时很奇怪,不过一直无解也就没管。几个月后,也就是前几天,才想要弄明白这个问(因为加入了该论坛团队,有兴趣也有条件了)。
啰嗦一下过程(有点离题),由于过了比较长的时间,记不得是哪个会员的头像了,只记得头像文件名,于是去uc的头像目录,执行

find ./ -name "xx_avatar_middle.jpg" >avatar.txt

1

find ./ -name "xx_avatar_middle.jpg" >avatar.txt

得到好多xx_avatar_middle.jpg文件,这下傻眼了,一开始以为头像文件名唯一呢。
还好MSE认得这个文件,于是借助Notepad++,将上面的avatar.txt的
./xx/xx/xx_avatar_middle.jpg替换为 wget -x
urlofavatardir/xx/xx/xx_avatar_middle.jpg,得到一个bash脚本:

#!/bin/bash
wget -x url/xx/xx/xx_avatar_middle.jpg
....

1

2

3

#!/bin/bash

wget -x url/xx/xx/xx_avatar_middle.jpg

....

-x选项是在本地建立和服务器一样的目录,否则下载下来一堆同名文件还是搞不清楚是文件在哪里。
然后执行,果然MSE又报毒了:

MSE图片报毒

具体内容如下:

类别: 特洛伊木马

描述: 这个程序很危险,而且执行来自攻击者的命令。

推荐的操作: 立即删除这个软件。

项目:
file:D:\xx\xx\data\avatar\000\0x\xx\xx_avatar_middle.jpg

1

2

3

4

5

6

7

8

类别: 特洛伊木马

描述: 这个程序很危险,而且执行来自攻击者的命令。

推荐的操作: 立即删除这个软件。

项目:

file:D:\xx\xx\data\avatar\000\0x\xx\xx_avatar_middle.jpg

找到图片位置后,接下来就是分析这张图片了,一开始没想着直接打开,直接在服务器上对图片进行base64的编码与解码,发现图片尾部被插入了一段 代码,可是看过代码之后貌似也没什么,就是普通的网页不过带了一些广告而已。之后用文本编辑器打开图片,确实可以看到文件末尾插入了一段网页代码。
接下来,就是好奇这个用户是谁了,他为什么要往头像离插代码,可是,面对UC头像的存储,毫无头绪,只得求助度娘,很快找到了,在Discuz官网有人分享了ucenter头像的存储规则:

function get_avatar($uid, $size = ‘middle‘) {
$size = in_array($size, array(‘big‘, ‘middle‘, ‘small‘)) ? $size : ‘middle‘;
$uid = abs(intval($uid)); //UID取整数绝对值
$uid = sprintf("%09d", $uid); //前边加0补齐9位,例如UID为31的用户变成 000000031
$dir1 = substr($uid, 0, 3); //取左边3位,即 000
$dir2 = substr($uid, 3, 2); //取4-5位,即00
$dir3 = substr($uid, 5, 2); //取6-7位,即00
// 下面拼成用户头像路径,即000/00/00/31_avatar_middle.jpg
return $dir1.‘/‘.$dir2.‘/‘.$dir3.‘/‘.substr($uid, -2)."_avatar_$size.jpg";
}

1

2

3

4

5

6

7

8

9

10

function get_avatar($uid, $size = ‘middle‘) {

$size = in_array($size, array(‘big‘, ‘middle‘, ‘small‘)) ? $size : ‘middle‘;

$uid = abs(intval($uid)); //UID取整数绝对值

$uid = sprintf("%09d", $uid); //前边加0补齐9位,例如UID为31的用户变成 000000031

$dir1 = substr($uid, 0, 3);  //取左边3位,即 000

$dir2 = substr($uid, 3, 2);  //取4-5位,即00

$dir3 = substr($uid, 5, 2);  //取6-7位,即00

// 下面拼成用户头像路径,即000/00/00/31_avatar_middle.jpg

return $dir1.‘/‘.$dir2.‘/‘.$dir3.‘/‘.substr($uid, -2)."_avatar_$size.jpg";

}

这样很快找到了问题头像的主人,不过也没啥收获,就此收手了。
最后贴出这个帖子,代码上面已经贴过就从略了,内容很实用:

自DZ0606版开始,用户头像与UC合并,而且采取了新的存贮规则。
为了彻底了解UC系统头像的存贮方式,对DZ的头像解析程序 avatar.php进行了简单分析。
请看下面(这里是上面)的程序段:
所以,UID为31的用户,其头像文件的正确路径为:
uc/data/avatar/000/00/00/31_avatar_small.jpg
uc/data/avatar/000/00/00/31_avatar_middle.jpg
uc/data/avatar/000/00/00/31_avatar_big.jpg
如果在以上位置找不到相应的文件,则自动重定向到:
Location: images/noavatar_$size.gif
也就是:
uc/images/noavatar_small.gif
uc/images/noavatar_middle.gif
uc/images/noavatar_big.gif
根据提交的参数调用其中的一个显示。
============================
明白了以上道理,实际应用中如果出现用户头像显示问题,就可以采取以下变通处理:
1. 模板中直接调用头像:

<img src=http://你的域名/UC目录名/avatar.php?uid=$post[authorid]&size="small" border=0/>

1

<img src=http://你的域名/UC目录名/avatar.php?uid=$post[authorid]&size="small" border=0/>

2. 升级后自行整理上传用户头像:
如果升级后有些用户头像显示不出来,你可以直接按照以上规则创建目录,将customavatars/下的用户自定义头像上传到相应目录并重新命名。
例:某用户UID为12345,原头像保存在customavatars/12345.jpg,根据以上算法,升级后的头像目录即为:
uc/data/avatar/000/01/23/
那么你就可以将用户原头像文件复制-改名为:45_avatar_middle.jpg,45_avatar_small.jpg,45_avatar_big.jpg
上传到该目录下就可以了。
当然,你也可以写一个程序自行完成以上过程。

时间: 2025-01-12 19:44:07

UCenter用户头像的存储规则 转的相关文章

用户密码加密存储十问十答,一文说透密码安全存储

我们数据库的权限管理十分严格,敏感信息开发工程师都看不到,密码明文存储不行吗? 不行.存储在数据库的数据面临很多威胁,有应用程序层面.数据库层面的.操作系统层面的.机房层面的.员工层面的,想做到百分百不被黑客窃取,非常困难. 如果密码是加密之后再存储,那么即便被拖库,黑客也难以获取用户的明文密码.可以说,密码加密存储是用户账户系统的底裤,它的重要性,相当于你独自出远门时缝在内衣里钱,虽然你用到他们的概率不大,但关键时刻他们能救命. 那用加密算法比如AES,把密码加密下再存,需要明文的时候我再解密

Exchange2016将用户头像发布到全局地址列表(GAL)

以前我们介绍过如何在Exchange Server 2010中将用户头像发布到全局地址列表中的方法,现在最新的邮件系统已经到了Exchange Server 2016了,那我们来看看如何进行配置. 1.以管理员身份打开CMD命令提示符窗口,输入,如下图所示: 2.打开MMC控制台窗口,添加Active Directory架构,如下图所示: 3.在下图所示页面中,右键thumbnailphoto,选择属性. 4.检查如下内容是否被选中. 5.将员工照片存储在邮件服务器中,大小不能超过10K,如下图

Android--利用相机或相册截取用户头像(解决了miui无法截取,以及部分机型拍照无返回Uri)

声明 本文的Demo可用于从本地获取用户头像时使用,解决了有些手机系统相机拍照后获取不到拍摄照片的问题,以及解决小米miui系统调用系统裁剪图片功能camera.action.CROP后崩溃或重新打开app的问题. 修改了部分机型拍照后返回的是缩略图的临时文件的问题. 如何获得一张原图 先看代码: UtilClass.requestPermission(ChangeMyDataActivityCopy.this, android.Manifest.permission.CAMERA); choo

android 用户头像,图片裁剪,上传并附带用户数据base64code 方式

图片上传的文件流我上一篇博客写了,这一篇我们说一下base64,base64上传方式就是将图片转换成base64码,然后把base64码以字符串的方式上传,然后服务器接收到以后再解码就可以了,相对于文件流来说比较简单: 用户头像上传我们首先要获得图片的url然后再裁剪图片,然后把裁剪后的图片转换成base64然后在上传: 下边是安卓端代码: 首先我们要获得裁剪后的图片:一,选择图片: 代码如下,通过对话框选择获得图片的方式: activity: /* * 提示对话框 */ private voi

Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则

上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则.Apollo是国内用户非常多的配置中心,所以,今天我们继续说说Spring Cloud Alibaba Sentinel中如何将流控规则存储在Apollo中. 使用Apollo存储限流规则 Sentinel自身就支持了多种不同的数据源来持久化规则配置,目前包括以下几种方式: 文件配置 Nacos配置 ZooKeeper配置 Apollo配置 本文我们就来一起动手尝试一下,如何使用Apollo来存储限流规则. 准备工作 下面我们将同时使用

Spring Cloud Alibaba基础教程:Sentinel Dashboard同步Apollo存储规则

在之前的两篇教程中我们分别介绍了如何将Sentinel的限流规则存储到Nacos和Apollo中.同时,在文末的思考中,我都指出了这两套整合方案都存在一个不足之处:不论采用什么配置中心,限流规则都只能通过Nacos界面或Apollo界面来完成修改才能得到持久化存储,而在Sentinel Dashboard中修改限流规则虽然可以生效,但是不会被持久化到配置中心.而在这两个配置中心里存储的数据是一个Json格式,当存储的规则越来越多,对该Json配置的可读性与可维护性会变的越来越差.所以,下面我们就

python获取微信公共平台消息列表和用户头像

转载需注明原文地址:http://blog.csdn.net/btyh17mxy/article/details/25207889 刚写的模拟登陆的方式从获取微信公众平台消息列表和用户头像的库,之后还会继续增加相关功能,github地址https://github.com/btyh17mxy/wxwall #!/usr/bin/env python # coding: UTF-8 import json import hashlib import re import random import

爬虫实例——爬取1元夺宝用户头像(借助谷歌浏览器开发者工具)

环境 操作系统:Windows 7 Python版本:2.7.9 过程 打开谷歌浏览器: 打开1元夺宝商品列表页面: 随便点击一个商品,按F12调用开发者工具,选择“Network”标签,筛选“XHR”,再单击页面上的“夺宝参与记录”: 观察开发者工具,找到返回JSON格式数据的URL,如下图: 从上图的URL返回的JSON格式数据我们可以得知参与夺宝的用户数(totalCnt),每个用户的头像链接前缀(avatarPrefix): 随便点击一个用户,从开发者工具中可以得知用户头像的URL是由头

回调函数,用户定义的排序规则

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>范例6-3</title>