HTML文本框变量到PHP,然后到shellbash以按名称查找文件


Html text box variable to PHP then to shell bash to find file by name

我想在我的网站上包含一个文本框,它将在我的 linux 框中搜索包含键入文本的任何文件。

当我"提交"时,文本框输出... "www.website.com/file_finder.php?name=samba"。接下来,"file_finder。PHP"文件被调用...PHP 文件应该在 linux 框中输入 "./file_finder smaba" 来运行 "file_finder"。

在 CLI 中手动输入"./file_finder 桑巴"就可以了。它查找包含"桑巴"的文件。

但是,单击文本上的"提交"不会根据键入的内容输出搜索。IT 输出基于上次在命令行手动运行"file_finder"的时间????

  1. 输入 "./file_finder fstab"
  2. bash输出所有带有"fstab"的文件
  3. 转到网站 在文本框中输入"桑巴",然后点击提交
  4. PHP echo 语句 #1 输出 "samba"
  5. PHP echo 语句 #2 输出 "./file_finder samba"
  6. 该网站会输出带有"fstab"的文件列表?!?!?

想法为什么它不起作用??

file_finder.php:

      <?php
       echo $_GET['name']."<br>";
        $nname=$_GET['name'];
        $shline = "./file_finder " .$nname."";
        echo $shline;
        $output = shell_exec($shline); 
        echo "<pre>$output</pre>";
        ?>

file_finder:

#!/bin/bash
 find -L /var/www/htdocs/ -type f -iname "*"$1"*" -exec basename {} '; > /var/www/htdocs/flr_logs/finder_list.log
  sort -k +1 /var/www/htdocs/flr_logs/finder_list.log >> /var/www/htdocs/flr_logs/finder_sorted.log
   cat /var/www/htdocs/flr_logs/finder_sorted.log

在评论中看到有关外壳注入的NY警告,

但是,单击文本上的"提交"不会输出基于 键入的内容。基于上次"file_finder"时间的 IT 输出 手动在命令行运行????

scriot需要对文件/var/www/htdocs/flr_logs/finder_list.log等的写入权限...

但实际上脚本应该使用唯一的临时文件名,以便两个在线用户可以同时使用它......

或者最好重写脚本以改用管道:

file_finder:

#!/bin/bash
find -L /var/www/htdocs/ -iname "*$1*" -type f -printf '%f'n' |
  sort -k +1 

请注意,我修复了上面的外壳注入并替换了比exec更有效的-printf,还对测试进行了重新排序,以便首先运行更便宜的iname测试。