在Apache服务器上扫描文本文件中的数据



我在Ubuntu 18.04上运行Apache(2.4.29版(服务器。我正在尝试扫描一个包含大量数据(存储的txt文件(的文件夹,以查找用户在网站上输入的关键字。我试过在.sh文件上运行Grep(我在.htaccess文件中启用了shell文件和所有这些(,但它给出了一个代码500的错误-内部错误。

请有人给我一些如何实现这一目标的想法好吗?非常感谢!

编辑:
这是我的.htaccess代码

Options -Indexes
Options +ExecCGI
order deny,allow
deny from all
allow from 192.168.0.
AddHandler cgi-script .sh

(CGI部分允许.sh文件运行,我知道它们可以运行,因为我运行了一个简单的脚本,它返回了日期和时间,并且有效(
这是我试图运行的脚本

ack "userinputdata" --files-with-matches

grep "userinputdata" /path/to/file

(ack是我下载的东西,但我相信grep是ubuntu的一部分(此外,为了获得用户的输入,我计划使用PHP编写一个新文件,用他们想要的东西替换"userinputdata",然后运行它并删除它。

以下是error.log文件中的错误片段

[Tue Mar 31 12:32:39.614059 2020] [cgi:error] [pid 26249] [client 
192.168.0.56:58830] AH01215:  : /var/www/html/test.sh
[Tue Mar 31 12:32:39.614075 2020] [cgi:error] [pid 26249] [client 
192.168.0.56:58830] AH01215:  : /var/www/html/test.sh
[Tue Mar 31 12:32:39.614091 2020] [cgi:error] [pid 26249] [client 
192.168.0.56:58830] AH01215:  : /var/www/html/test.sh
[Tue Mar 31 12:32:39.614107 2020] [cgi:error] [pid 26249] [client 
192.168.0.56:58830] AH01215:  : /var/www/html/test.sh
[Tue Mar 31 12:32:39.614123 2020] [cgi:error] [pid 26249] [client 
192.168.0.56:58830] AH01215:  : /var/www/html/test.sh

您有多个问题。

您的脚本必须从一行开始,该行告诉web服务器要调用什么程序来执行脚本。在您的情况下,这将是#!/bin/bash

您必须在内容之前发送一个"Content-type"标头——一个后面跟着两个换行符的字符串。那就是

echo "Content-type: text/html"
echo ""

接下来,您需要将用户输入作为变量数据访问到程序中。在您的代码段中,字符串"userinputdata"的意思是:文字字符串"userinputdata",与用户提交的表单数据(或查询字符串(没有关系。

假设表单的方法是GET(在这种情况下应该是GET,而不是POST(,那么脚本在变量$QUERY_STRING中有可用的查询字符串,但它是url编码的,需要以某种方式进行解析,例如使用awk

尽管采取了这些步骤,但您也可能存在其他配置和/或权限问题。您可能希望将脚本放在服务器的cgi-bin目录中。

我建议做几件事:(1(好好看看https://blog.eduonix.com/shell-scripting/learn-cgi-scripting-using-bash-in-linux-shell-scripting/;(2( 考虑使用不同的语言,例如PHP。手动分析输入参数是一项很好的学习练习,但它也是一个已经用多种语言为您发明的轮子。

最后,打开和关闭大量文件——现代操作系统非常擅长这一点,但这并不是搜索大量数据以查找文本字符串的最有效方法。因此grep可能不是理想的工具。有类似的数据库。但这有点超前了。

希望这能有所帮助——并且玩得开心!

最新更新