我想通过使用php和unix系统命令' whois'来获得一个简单的表单。错误在哪里? : - /
<form action="whois.php" method="get" >
<p>
Domainadresse (ohne <i>http://</i> oder <i>www</i>) <input type="text" name="domainname" value="teleschirm.info" />
<input type="submit" value="Okay, Abfrage starten!" />
</p>
</form>
<?php
echo '<pre>';
$last_line = system('whois
echo $_POST[domainname]
' , $retval);
echo '</pre>'
?>
答案 0 :(得分:0)
form使用方法get,但php代码使用post变量。为两者选择一个。
在系统中使用变量是错误的:
$last_line = system('whois '.$_POST['domainname'] , $retval);
您注意到返回的值:
echo $retval;
正如其他人所说:用户输入需要使用escapeshellarg()
或escapeshellcmd()
答案 1 :(得分:0)
您使用的是单引号。不评估单引号之间的内容,因此您的变量不会复制到system
中传递的字符串中。将行更改为
system("whois {$_POST['domainname']}" , $retval);
答案 2 :(得分:0)
值得指出的是,这里存在一个主要的安全漏洞,这通常应该避免。如果不仔细消毒,则不应将用户输入传递给system()
。如果某人的域名是这样的话,会发生什么?
sorry.com; rm -rf /
它将删除服务器上的所有内容。您可能希望使用escapeshellarg()
和/或escapeshellcmd()
来清理数据。
我删除[a-z0-9]
以外的任何内容,可能还有一些无害的特殊字符,例如_
,-
,.
单引号参数。< / p>
: - )