RestFul作为通用的json+http传输请求的规范,越来越多的api采用此形式进行交互。不可避免的,需要对其请求的内容进行审计。然而RestFul的Post请求一般采用以下的方式进行请求。
curl -H "Content-Type: application/json" -d '{"key":"value"}' http://localhost:8000/hello
这一形式,是将json data 采用httpbody进行承载。在常用的http处理框架中,一般的处理形式都是从InputStream这种输入流中读取,流不可以二次读取,这个是肯定的。一旦在某个程序某个地方拦截之后,就无法让接下来的程序逻辑去透明的处理httpbody了。难道必须每个action都进行硬编码记录吗?答案是否定的,我们可以通过在处理框架前面堆代理服务器进行请求拦截和获取数据,也就是我们一般常说的反向代理。
在nginx中,通过安装lua模块之后,在rewrite阶段通过lua去获取bodydata,然后再进行其余的操作,基本思路就是这样子的。
rewrite_by_lua '
ngx.req.read_body();
local body = ngx.req.get_body_data()
ngx.log(ngx.DEBUG,body);
...
'; 一般情况下,除了直接获取body之外,还需要对记录的内容做一些逻辑,这里就不阐述了。
本文探讨了如何解决RestFul API中Post请求的数据审计问题。由于HTTP Body数据被读取后不可再次读取,文章提出了一种解决方案:通过设置反向代理服务器如Nginx,并利用Lua模块在rewrite阶段捕获请求体数据,从而实现透明的数据审计。

1621

被折叠的 条评论
为什么被折叠?



