今天无意中发现,URL中的查询字符串不一定非要是xxx=yyy&aaa=bbb格式,服务器将URL中问号后的查询芓符串赋给名为QUERY_STRING的环境变量然后调用可执行的脚本或二进制文件执行,将其标准输出返回给客户端
所以我想可以直接把shell命令作为URL输入,返回shell执行的输出试了下,果然可以
下面说明一下实现步骤:
1。安装linux与服务器启动服务器
2。服务器通常会有一个www/cgi-bin的目录我在这里放一个shell脚本,名为test2
第1句表示是shell脚本实际上不加也可以,因为shell是默认的脚本
第2句我网上抄的,具体原理也不懂作用是解码URL, 当URL中有空格時,从客户端传过来会变成%20, 20是空格的16进制ASCII码
第3句是必须的,否则在客户端调用时就出错是http协议规定的。
第4句就是将URL解码
第5句是执行命囹并返回给客户端
这样直接通过URL对用户不友好但给前端提供了接口,于是我又写了个html文件放在www/html文件夹中,名为test.html
两个js函数httpGet是网上抄的,f是点击按钮的回调函数主要两句,第1句获取用户输入并加上前缀组成url,第2句调用httpGet函数并将返回输出
当然,这样直接把shell接口暴露在外很危险但这适合给一些在局域网里面的设备作接口,就是嵌入式设备可以把url做成二维码,直接扫码访问(当然127.0.0.1要改成局域网IP)