vernesong / OpenClash

A Clash Client For OpenWrt
MIT License
17.51k stars 3.18k forks source link

yml_proxys_set.sh变量泄露 #373

Closed tete1030 closed 4 years ago

tete1030 commented 4 years ago

luci-app-openclash/files/usr/share/openclash/yml_proxys_set.sh中 例如 image 此处有两个问题:

  1. obfs在部分server中不存在该属性(例如socks5 server),其值不是none而是空值,导致obfss被错误地赋值
  2. 如果下一个server设置了obfs=none,obfss会泄露到下一个server配置中,导致https://github.com/vernesong/OpenClash/blob/c66c5217c9717962da7428573933b43d8499b780/luci-app-openclash/files/usr/share/openclash/yml_proxys_set.sh#L237 这里被错误地执行

我现在自己的workaround: image

建议:所有函数变量变为local,或者初始化所有函数变量

vernesong commented 4 years ago

config_foreach yml_servers_set "servers" 命令执行时每个节点的信息是会重新取值的,泄露不至于,只是这里和下面写入的判断确实有问题

tete1030 commented 4 years ago

config_get是会重新取值,我指的是obfss这一类中途使用的,最好能严格一点

vernesong commented 4 years ago

好的

tete1030 commented 4 years ago

感谢! 对了,顺带说一下,之前还发现个小问题 https://github.com/vernesong/OpenClash/blob/a425b16a1f34b07337aff620201107c92f97c43b/luci-app-openclash/files/usr/share/openclash/openclash_watchdog.sh#L67

此处当PREROUTING中不存在-j openclash时,$op_line可能为空值,此时这个if不会为true,可以改为:

   if [ "$last_line" != "$op_line" ]; then
vernesong commented 4 years ago

有空你可以先pr