Просто убедитесь, что аргументы, переданные в eval
, не поступают из внешнего ввода или что, если они есть, вы предварительно их продезинфицировали.
Например, не делать:
n=0
....
n=((n + 1))
eval "var$n=$1"
$ n
находится под вашим контролем, содержание $ 1
- нет. Если $ 1
равно foo; reboot
, например, eval получит код var3 = foo; reboot
для интерпретации, и это запустит перезагрузку.
Используйте:
eval "var$n=\$1"
Тогда вместо этого eval
получит var3 = $ 1
, что нормально.
eval "$1=\$2"
Тоже неправ. Вам нужно будет убедиться, что содержимое $ 1
только из набора допустимых значений (дезинфекция):
unset var1 foo bar
case $1 in
(var1 | foo | bar) eval "$1=\$2";;
(*) echo >&2 unexpected variable name; exit 1;;
esac
Обратите внимание, что eval
- не единственная команда, которая оценивает произвольный код. есть много других, например sh
, perl
, awk
, sed
, даже read
, export
, typeset
, printf
, test
или [
] в некоторых оболочках, вам нужно быть одинаково осторожным с ними при передаче внешний ввод в качестве аргументов.
Перейдите в настройки--> Редактор настроек--> xfce4 -питание -менеджер--> ручка -яркость -клавиши и снимите флажок.
РЕДАКТИРОВАТЬ :Это тоже не работает. Кнопка "громкость вверх" исправна,но кнопка «Уменьшение громкости» по-прежнему каким-то образом зависит от диспетчера питания и не может установить пользовательский ярлык с помощью сочетаний клавиш xfce...
Я установил следующие сочетания клавиш в меню «Настройки» -> «Клавиатура» -> «Ярлыки приложений»:
Во-первых, это не сработало, потому что менеджер xfce4 -power -по-прежнему захватывал ключ, и появлялось уведомление о яркости. Мне пришлось выйти -из системы и войти -снова , чтобы все заработало. Теперь яркостью можно управлять, но уведомлений больше нет (, что меня не смущает ).