我需要将文本框的内容传递给变量。即,在html页面的texbox中输入的任何内容都需要传递给变量。这是因为我在linux shell编程中调用了HTML(CGI)。我需要根据需要操纵该变量。你有任何想法吗?
我需要做的是,我想将MAC地址作为用户的输入。即我们应该有一个带有文本框的HTML页面,该用户将能够输入MAC地址。因此,任何用户输入文本框都需要传递给变量。
一旦我们有了变量,这个脚本就会自动将这个MAC地址添加到linux防火墙中以拒绝访问。
代码应类似于以下内容:
!/bin/bash
echo "Content-type: text/html"
echo ""
echo ""
echo "enter the MAC address "
iptables -A INPUT -m mac --mac-source $mac_address -j DROP
service iptables save
service iptables restart
我将此文件(test.cgi)保存在/ var / www / cgi-bin目录下,我将从firefox运行此脚本。
现在问题是变量$mac_address
。 CGI不会将文本框输入传递给变量$ mac_address。
答案 0 :(得分:4)
这个问题的真正答案是 不 。
您的网络服务器似乎以root
权限运行。这是第一个禁忌。
您真的想让整个世界都能够修改防火墙配置吗?您无法控制如何调用shell脚本,传递给它的内容。您正在打开 主要 安全漏洞。
请参阅WWW Security FAQ on CGI scripts和Writing secure CGI scripts以及CGI Security : Better Safe than Sorry。
答案 1 :(得分:3)
首先,阅读CGI primer。
您需要一个包含以下代码的HTML页面:
<form method="get" action="/cgi-bin/my-fw-script.sh">
<p>Gimme an IP address: <input name="addr"></p>
<input type="submit">Block IP</input>
</form>
当用户单击表单的“提交”按钮时,将运行您的Bash CGI程序。 (上例中的 /path/to/cgi-bin/my-fw-script.sh 。)文本输入将在QUERY_STRING环境变量中,格式为 variable = value 。对于简单输入,您可以调用Bash函数eval将其转换为Bash变量:
#!/bin/sh
eval $QUERY_STRING
echo You asked me to block $addr.
这仅适用于单个输入字段,如果有空格或其他特殊字符,则会中断。我想其他人推荐的bash_cgi会为你处理这些细节。只有当这个程序保持非常简单时,才能像上面的例子一样。
顺便说一句,您几乎肯定不希望将MAC地址添加到防火墙。这仅适用于与防火墙盒子在同一LAN上的主机。来自另一个LAN,Internet等的数据包将具有LAN网关的MAC地址。您可能应该通过IP地址阻止主机。
答案 2 :(得分:1)
查看bashlib - CGI programming with the bash shell
bashlib是一个shell脚本,它在bash shell中进行CGI编程 更容易,或至少更容忍。它包含一些功能 自动调用并放置表单元素(来自POST和GET) 和环境中的cookie。它还包含完整的 有关如何使用这些变量以及如何设置cookie的文档 手动
超级简单使用并将传递url字符串作为变量等等轻而易举。不要让反对者讨厌bash作为一种网络脚本语言。它可以拥有自己的...而且它简单,无处不在,有效......这种情况略有不同,但如果你不容易受到同伴的压力,我会说要去做吧。
#!/bin/bash
# this sources bashlib into your current environment
. /usr/local/lib/bashlib
echo "Content-type: text/html"
echo ""
# OK, so we've sent the header... now send some content
echo "<html><title>Crack This Server</title><body>"
相关且很酷:xmlsh和shellinabox。
答案 3 :(得分:0)
很抱歉在这一点上继续努力,我只是认为太有趣了 ......
因此,对于最终的所有CGI脚本,请查看...
警告...... 不是因为安全怪胎或任何不完全了解以下内容的人...
#!/usr/bin/python
# /var/www/cgi-bin/doanything.cgi r-xr-x--- wwwuser group
# what does this do? LITERALLY ANYTHING. Usage:
# http://server.local/cgi/doanything.cgi?DO="if you can think of how to bash it"; THEN="bash it"; echo $THEN
# result: bash it
import cgitb; cgitb.enable()
import os, urllib, subprocess as sub
# Retrieve the command from the query string and unencode the escaped %xx chars
str_command = urllib.unquote(os.environ['QUERY_STRING'])
p = sub.Popen(['/bin/bash', '-c', str_command],
stdout=sub.PIPE, stderr=sub.STDOUT)
output = urllib.unquote(p.stdout.read())
print """\
Content-Type: text/html\n
<html><body>
<pre>
<!-- UNCOMMENT THE FOLLOWING TO ECHO COMMAND -->
<!-- $ %s -->
%s
</pre>
</body></html>
""" % (str_command, output)