【问题标题】:Discord bot that commits to github提交到 github 的 Discord 机器人
【发布时间】:2020-07-16 10:08:16
【问题描述】:

我之前写了一个question,关于如何使用机器人“动态”管理来自 github 的白名单(实际上我没有收到任何答案,但我做了一个不和谐的答案)。

所以我有一个 github 存储库,所有想要使用我的应用程序的用户都必须被允许这样做。这是由 discord bot(使用 Python discord 模块构建的)完成的。

当用户想要被添加到白名单时,他必须向机器人发送 DM 命令。因此,所有用户都可以从白名单中管理自己的帐户。

其实我就是在这个等待中做到的:

  • 在我的电脑上创建一个 git repo
  • 激活不和谐机器人(也来自我的电脑)
  • 机器人每次收到添加帐户/删除帐户命令时都会编辑白名单文件
  • 每隔一小时它将对文件所做的更改提交到 github。

但我正在尝试了解它是否存在一些严重的“安全”问题,例如是否有人可以看到机器人源代码并对其进行更改或类似的事情。

另外,现在提交更改的推送是由执行此命令的 python 脚本完成的

  • os.system('git add .')
  • os.system('git commit -m "whitelist changes. From discord bot')
  • os.system('git push origin master')

从我的角度来看应该不会太糟糕,但我不知道以这种方式完成这项任务是否有风险

【问题讨论】:

  • 您有问题吗?请专注于您遇到的特定错误或问题。

标签: python git github discord discord.py


【解决方案1】:

没有看到你的源代码我不能具体说什么,但这里有一些通用的cmets。

Shell 命令会带来很多潜在的安全问题。如果您将未经过滤的用户输入传递给 shell,恶意用户可以利用。例如,假设您要允许用户创建分支。

command = 'git branch %s' % (branch_name)
os.system(command)

这允许用户执行像 'foo; 这样的代码。回声 0wned'

为避免这种情况,请避免使用 os.system,它使用 shell 执行命令。而是使用subprocess.run,这需要您传入命令及其参数。

subprocess.run(["git", "branch", branch_name])

这不使用 shell 并且不受恶意分支名称的影响。

更好的是,完全避免运行命令并使用库与 Git 对话,例如 pygit2。处理错误更快更容易,虽然可能有点陌生。


您的 Discord 机器人可以访问您的 Github 帐户,这会暴露您的 Github 帐户。机器人无需推送到 Github。编写一个单独的命令,定期推送到 Github。一个简单的计划作业就可以了。


最后,使用 Git 和 Github 作为数据库非常尴尬。我不确定我是否理解白名单的用途,或者为什么它需要在 Github 上。如果您只想免费存储一些数据,许多托管服务都提供免费套餐。例如,Heroku 提供“爱好层”托管。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-16
    • 2018-08-17
    • 2021-04-01
    • 2021-02-02
    • 2021-07-27
    • 2022-01-23
    • 2021-05-23
    • 2021-01-21
    相关资源
    最近更新 更多