Мы пытаемся запустить скрипт LUA, чтобы зацепить фазу исправлений запроса в приложении Apache Server, но мы продолжаем получать следующее: < /p>
»[Thu Aug 28 09: 55: 37.099004 2025] fetch_token_hook in/var/www/html/>/lua/fetch_token.lua, Реферат: https: // >/?
## Vhost docroot
DocumentRoot "/var/www/html/"
## Directories, there should at least be a declaration for /var/www/html/
AllowOverride None
Require all granted
## Custom fragment
# Lua config
LoadModule lua_module modules/mod_lua.so
LuaHookFixups /var/www/html//lua/fetch_token.lua fetch_token_hook
SetHandler lua-script
< /code>
И это то, как выглядит скрипт Lua: < /p>
local http = require "socket.http"
local ltn12 = require "ltn12"
local cjson = require "cjson"
local token_endpoint = ""
local client_id = ""
local client_secret = ""
local scope = ""
local cached_token = nil
local expires_at = 0
local function get_new_token(r)
local body = string.format(
"grant_type=client_credentials&client_id=%s&client_secret=%s&scope=%s",
client_id, client_secret, scope:gsub(" ", "%%20"))
local resp_chunks = {}
local _, code = http.request{
url = token_endpoint,
method = "POST",
headers = {
["Content-Type"] = "application/x-www-form-urlencoded",
["Content-Length"] = #body
},
source = ltn12.source.string(body),
sink = ltn12.sink.table(resp_chunks)
}
if code ~= 200 then
r:err("[lua] token endpoint returned status "..tostring(code))
return nil
end
local token_json = table.concat(resp_chunks)
local t = cjson.decode(token_json)
if not t.access_token or not t.expires_in then
r:err("[lua] token endpoint did not return access_token / expires_in")
return nil
end
cached_token = t.access_token
expires_at = os.time() + tonumber(t.expires_in)
return cached_token
end
function fetch_token_hook(r)
file = io.open("/var/www/html//lua/lualog.txt","a")
file:write("Start of log \n")
file:write(r.uri)
file:write("\n ")
file:close()
if not r.uri:match("^<
>") then
return apache2.DECLINED
end
if (not cached_token) or (os.time() > expires_at - 30) then
if not get_new_token(r) then
return apache2.HTTP_INTERNAL_SERVER_ERROR
end
end
r.headers_in["Authorization"] = "Bearer "..cached_token
return apache2.DECLINED
end
< /code>
Мы удваиваем, и тройной проверяли путь и имен, и мы смогли получить эту точную настройку на локальном уровне, поэтому мы знаем, что это не опечатка. На данный момент мы почти убеждены, что это какая -то проблема безопасности, но мы тоже не видим никаких дыр. Это разрешения, предоставленные файлу fetch_token.lua: < /p>
»-Rwxr-xr-x. 1 > www 1834 август 29 09:33 fetch_token.lua» < /p>
Мы также попробовали:
-Пробое. указывать на то, что директива не может найти скрипт даже с правильным путем)
- попытка удалить Lua_module Modules/mod_lua.so (как и ожидалось, дает ошибку. разница)
- попытался запустить сценарий Lua вручную (он работает)
Подробнее здесь: https://stackoverflow.com/questions/797 ... -in-script