alias urlurl decodee='sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b&

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

今天无意中发现,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)

转义会降低可读性只需用其他特殊字符作为sed表达式的“分隔符”(取代默认的/)即可。

这是sed命令方便用户的一个特性vi中的:s也同样支持,灵活使用相当方便!

脚本获取用户指定的块设备(一个带有/的路径),并将它写入./ebs_*.fio文件中

我们使用sed来替换文本文件中的指定字符串,它的一般语法如下:

如果string中包含特殊字符则需要用\进行转义。那么脚本中的sed语句应该写为:

但是脚本中的块设备是一个变量:

我们不便对$user_device的内容(/dev/nvme1n1)进行转义,因此变量中的/就会与sed表达式的语法冲突从而产生错误。

思路很简单将路径转换成带有转义符的sed可以使用的字符串。

通过学习sed命令我发現它有一个很好的设计,就是表达式本身的语法非常灵活当用户不方便转义字符串中的特殊字符(如/)时,sed支持使用自定义分隔符让鼡户避开冲突。

用户自定义语法的分隔符很简单就是在s的后面紧跟自定义的分隔符即可。经过尝试自定义的分隔符可以为%$@?#等等不会冲突的字符……大家可以简单尝试一下就可以掌握,非常方便!

因此只要把脚本改为下面的样子,就可以顺利执行非常简单:

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
对于新创建的unit文件或,修改了的unit文件要通知systemd重载此配置文件;

我要回帖

更多关于 url decode 的文章

 

随机推荐