Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add support for getting IP addr by scripts #511

Merged
merged 8 commits into from
Feb 2, 2023
Merged

feat: add support for getting IP addr by scripts #511

merged 8 commits into from
Feb 2, 2023

Conversation

yin1999
Copy link
Contributor

@yin1999 yin1999 commented Feb 2, 2023

Fixes: #451

@jeessy2
Copy link
Owner

jeessy2 commented Feb 2, 2023

需要考虑,用户刚安装了ddns-go没填写配置,此时可公网访问,被别人执行了恶意命令

@yin1999 yin1999 marked this pull request as ready for review February 2, 2023 13:20
@yin1999
Copy link
Contributor Author

yin1999 commented Feb 2, 2023

需要考虑,用户刚安装了ddns-go没填写配置,此时可公网访问,被别人执行了恶意命令

已添加

Comment on lines +192 to +193
if runtime.GOOS == "windows" {
execCmd = exec.Command("powershell", "-Command", cmd)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

因为在windows上采用 powershell 脚本,所以无法直接支持 windows XP(需要用户自行安装)。但采用 powershell 可以让用户使用与 Linux 类似的管道来流式处理数据,相对于 cmd 也更加强大。

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个可以

@jeessy2
Copy link
Owner

jeessy2 commented Feb 2, 2023

也有可能被别人执行了恶意命令。比如:非法用户可以设置静止公网访问/设置密码,然后在设置恶意命令。
推荐是已经设置过cmd的,可以保存,没设置过cmd的,需要在内网设置?

@jeessy2
Copy link
Owner

jeessy2 commented Feb 2, 2023

或者:
没有配置文件并ddns-go启动时间在5分钟内才能设置cmd

@yin1999
Copy link
Contributor Author

yin1999 commented Feb 2, 2023

仅允许通过内网设置命令,或在内网设置过命令以后(即保存的配置文件中,命令非空)才允许通过公网设置命令。你觉得哪种更合适些。

或者:
没有配置文件并ddns-go启动时间在5分钟内才能设置cmd

对于这个建议,或者修改成,如果没有配置文件,仅允许用户在5分钟内保存过一次配置文件。如果超过了 5 分钟,用户应选择重启服务。

要尽可能地保证安全的话,仅允许通过内网设置命令是最好的。因为在启用公网的情况下,若用户没有通过 Nginx 或其他的 web 服务器做 https 反代,理论上是会有相对较大的用户名密码泄漏的可能。但这么做对部分用户来说,可能会有比较高的门槛,得用 ssh 之类的做跳板。

@jeessy2
Copy link
Owner

jeessy2 commented Feb 2, 2023

几种方式都行,优先考虑保证安全性吧,毕竟能任意执行shell挺危险的
如果没有配置文件,仅允许用户在5分钟内保存过一次配置文件。如果超过了 5 分钟,用户应选择重启服务。 这种方式也可以,基本保证是当事人在执行,不过有些人可能在5分钟内设置不了,设置cmd需要5分钟,其它30分钟?

@yin1999
Copy link
Contributor Author

yin1999 commented Feb 2, 2023

如果没有配置文件,仅允许用户在5分钟内保存过一次配置文件。如果超过了 5 分钟,用户应选择重启服务。 这种方式也可以,基本保证是当事人在执行,不过有些人可能在5分钟内设置不了,设置cmd需要5分钟,其它30分钟?

还是要考虑一点,就是,如果允许在外网直接设置 cmd,那用户可能会习惯性地认为,他可以在随后的时间中任意修改 cmd。而用户若设置了其他的内容,那可能也会认为,他可以在后续的修改中设置 cmd 命令。

5分钟可能是短了些,可否增加到 10 分钟,对于所有的配置,允许用户在 10 分钟内保存过配置后,在后续的修改中添加命令。

要是要保证尽可能的安全性的话,可能还是禁用cmd的公网修改会比较好。一般来说,ddns的配置是长期不会修改的。而要使用 cmd 来获取 IP,也应该给用户提高一定的门槛,以避免命令的错误使用。不知道这么考虑是否合理

@jeessy2
Copy link
Owner

jeessy2 commented Feb 2, 2023

有可能有些人也会要在外网配置cmd获取ip,限制死了也不好。
保证是他本人操作就好,自己的内容自己负责。

@yin1999
Copy link
Contributor Author

yin1999 commented Feb 2, 2023

有可能有些人也会要在外网配置cmd获取ip,限制死了也不好。 保证是他本人操作就好,自己的内容自己负责。

将第一次保存的时限修改为 10 分钟,后续不对任意内容的修改做更多的限制?

这样逻辑相对简单一点

@jeessy2
Copy link
Owner

jeessy2 commented Feb 2, 2023

将第一次保存的时限修改为 10 分钟,后续不对任意内容的修改做更多的限制?

这样逻辑相对简单一点

可以。你觉得此方案如何?

@yin1999
Copy link
Contributor Author

yin1999 commented Feb 2, 2023

将第一次保存的时限修改为 10 分钟,后续不对任意内容的修改做更多的限制?
这样逻辑相对简单一点

可以。你觉得此方案如何?

可以吧,考虑在 readme、release note 中添加提高安全性的说明(使用反向代理,使用 https 来加密公网访问)?
然后,如果请求来自内网,则不添加 10 分钟的限制

@jeessy2
Copy link
Owner

jeessy2 commented Feb 2, 2023

可以吧,考虑在 readme、release note 中添加提高安全性的说明(使用反向代理,使用 https 来加密公网访问)?

可以。好像除了运营商,其它途径也不容易被拦截流量

@yin1999
Copy link
Contributor Author

yin1999 commented Feb 2, 2023

好像除了运营商,其它途径也不容易被拦截流量

是的,我添加了一行建议

@jeessy2 jeessy2 merged commit 04f0c7e into jeessy2:master Feb 2, 2023
@jeessy2
Copy link
Owner

jeessy2 commented Feb 2, 2023

跑了一下,没啥问题了。thanks

@yin1999 yin1999 deleted the feat-script branch February 2, 2023 16:01
@jeessy2
Copy link
Owner

jeessy2 commented Feb 3, 2023

想起一个问题,也有在公司用ddns或者内网被入侵了,别人可以扫描内网,来执行非法的cmd。这个看有没有好的处理方案

解决方案:
只要修改cmd脚本,必须满足:ddns-go启动时获取是否配置了帐号密码,如配置了帐号密码可任意修改。如未配置,必须重启并在10分钟之内修改?

@yin1999
Copy link
Contributor Author

yin1999 commented Feb 3, 2023

ddns-go启动时获取是否配置了帐号密码,如配置了帐号密码可任意修改。如未配置,必须重启并在10分钟之内修改

那也需同时限制对帐号密码的添加,感觉还得再考虑一下。

@jeessy2
Copy link
Owner

jeessy2 commented Feb 3, 2023

修改了cmd才验证帐号密码是否在启动时已经存在/启动时间在10分钟内,没修改cmd不要求。
相当于要限制到具体一个人身上,不能信任局域网的设备

@yin1999
Copy link
Contributor Author

yin1999 commented Feb 3, 2023

修改了cmd才验证帐号密码是否在启动时已经存在/启动时间在10分钟内,没修改cmd不要求。 相当于要限制到具体一个人身上,不能信任局域网的设备

修改CMD一般就不是常规的脚本自动化处理了,可能会尝试添加用户名密码,来绕过禁止修改CMD的限制,要通过这个方法来限制的话,是不是把用户名密码的修改限制也加上会好点

@jeessy2
Copy link
Owner

jeessy2 commented Feb 3, 2023

修改CMD一般就不是常规的脚本自动化处理了,可能会尝试添加用户名密码,来绕过禁止修改CMD的限制,要通过这个方法来限制的话,是不是把用户名密码的修改限制也加上会好点

即使非法设置了用户名和密码,也要重启了才能在次修改cmd,变量在启动时就固定了

@yin1999
Copy link
Contributor Author

yin1999 commented Feb 3, 2023

修改CMD一般就不是常规的脚本自动化处理了,可能会尝试添加用户名密码,来绕过禁止修改CMD的限制,要通过这个方法来限制的话,是不是把用户名密码的修改限制也加上会好点

即使非法设置了用户名和密码,也要重启了才能在次修改cmd,变量在启动时就固定了

嗯嗯,没仔细看,这样也可以。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

获取ip方式, 是否可以增加脚本方式?
2 participants