首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们如何知道用户通过api更改了github中默认的配置文件图片

我们如何知道用户通过api更改了github中默认的配置文件图片
EN

Stack Overflow用户
提问于 2019-09-09 09:47:22
回答 1查看 363关注 0票数 2

我正在写一本脚本来审计吉顿。因此,在这个过程中,我试图找到一种方法来知道我的组织中的GitHub用户是否从默认的配置文件图片中更改了他们的配置文件图片。

我正在使用go-github包来访问Github。https://github.com/google/go-github/blob/ababee01b03f69965d0ec370e65b61ec7967be34/github/users.go

目前,我可以从ListMembers方法中获取用户列表,GetAvatarURL获取组织用户配置文件图像。但是我无法从默认的github图像和用户更改图像中得到任何区别。

下面是ima讨论的默认图像。

我得到了像AvatarURL一样的https://avatars0.githubusercontent.com/u/XXXXXX?v=4,这对于默认情况和用户上传的图片是一样的。只有更改才是avatars1avatars2avatars3avatars4等映像的主机服务器。

还有别的方法可以找出不同之处吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-25 23:22:59

一种方法是使用像ImageMagick这样的工具获取一些有关图像的信息。

在检查Github自动生成的识别码之后,有两个检查会很有趣:

  • 检查该图像是否有2种独特的颜色: 识别-format %k github_avatar.png

产出:

代码语言:javascript
复制
2
  • 其中一种颜色是灰色的-ish F0F0F0。 转换github_avatar.png -colors 2\ -format "%c“柱状图:info:\c d‘# -f2 \c -d’‘-f1

产出:

代码语言:javascript
复制
D65193
F0F0F0

识别转换工具是ImageMagick的一部分

下面的代码使用github获取一个组织的50个成员,并使用上面的2个检查检查每个avatarURL

代码语言:javascript
复制
package main
import (
    "github.com/google/go-github/github"
    "fmt"
    "context"
    "os/exec"
    "strconv"
    "strings"
)

func main() {
    client := github.NewClient(nil)
    opt := &github.ListMembersOptions{
        ListOptions: github.ListOptions{PerPage: 50},
    }
    members, _, err := client.Organizations.ListMembers(context.Background(), "IBM", opt)
    if err != nil {
        println(err.Error())
        return
    }
    max := 50
    for i := 0; i < max; i++ {
        identify_cmd := fmt.Sprintf("identify -format %%k %s",*members[i].AvatarURL)
        cmd := exec.Command("bash", "-c",identify_cmd)
        stdout, err := cmd.Output()
        if err != nil {
            println(err.Error())
        } else {
            color_unique, err := strconv.Atoi(string(stdout))
            if err != nil {
                println(err.Error())
            }
            //check that the thumbnail has exactly 2 unique colors
            if (color_unique == 2) {
                //check that the thumbnail has F0F0F0 among those 2 colors
                convert_cmd := fmt.Sprintf("convert %s -colors 2 -format \"%%c\" histogram:info: | cut -d'#' -f2 | cut -d' ' -f1",*members[i].AvatarURL)
                cmd := exec.Command("bash","-c",convert_cmd)
                stdout, err := cmd.Output()
                if err != nil {
                    println(err.Error())
                } else {
                    colors:=strings.Split(string(stdout),"\n")
                    has_color:=false
                    for i := 0; i < len(colors); i++ {
                        if (colors[i] == "F0F0F0") {
                            has_color = true
                            break
                        }
                    }
                    if (has_color) {
                        fmt.Printf("[%v/%v] user %v has not set her/his thumbnail image (%v)\n",i+1,max,*members[i].HTMLURL,*members[i].AvatarURL)
                    } else {
                        fmt.Printf("[%v/%v] the thumbnail for user %v has 2 unique color but none of them is F0F0F0 (%v)\n",i+1,max,*members[i].HTMLURL,*members[i].AvatarURL)
                    }
                }
            } else {
                fmt.Printf("[%v/%v] %v is not a default thumbnail\n",i+1,max,*members[i].AvatarURL)
            }
        }
    }
}

注意:为了将URL传递给工具而不是常规文件,我不得不在/etc/ImageMagick-6/policy.xml 注释https策略下编辑该文件,但是如果需要的话,您可以自己修改代码来下载化身图像。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57851545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档