Nginx Lua: безопасность выполнения сценария оболочки - PullRequest
0 голосов
/ 19 мая 2019

Я хочу запустить некоторый скрипт оболочки для определенного запроса POST и передать некоторые параметры запроса в скрипт.Я могу добиться этого, используя этот скрипт lua в конфигурации nginx:

location /some/path {
  content_by_lua '
    ngx.req.read_body()
    local args, err = ngx.req.get_post_args()

    if err == "truncated" or not args then return end

    local arg = args["some_arg"]
    if arg == nil then return end

    function escape(s)
      if s:match("[^A-Za-z0-9_/:=-]") then 
        return "\'"..s:gsub("\'", "\'\\\\\'\'").."\'" 
      else 
        return s 
      end
    end

    command = "/path/to/script.sh "..escape(arg)
    local handle = io.popen(command);
    local result = handle:read("*a");
    handle:close();
    ngx.print(result);
    ';
}

URL открыт для всех пользователей.Есть ли у этого подхода какие-либо проблемы безопасности, кроме необходимости правильно экранировать аргументы?

...