我需要在网页表单中获取用户输入并将其传递给脚本以创建用户账户,但是我无法使其正常工作。到目前为止,我有一个名为add_user.sh的脚本,内容如下:
adduser -u $NAME -p $PASS -g users -s /bin/bash
但我不确定那是否能够捕获用户从网页表单输入的数据?
如果您的服务器启用了它,您可以将其构建成字符串,然后使用exec
$str = 'adduser -u ' . $NAME . ' -p ' . $PASS . ' -g users -s /bin/bash';
exec(escapeshellcmd($str));
在此之前,我应该注意到许多主机出于安全原因禁用此功能以及执行命令行命令的任何函数。仅仅因为它存在并不意味着这是一个好主意。
$NAME
和$PASS
。 - lethal-guitar:)
不要使用这种方法。 - gniourf_gniourfgniourf -g admin
或类似的东西进行注册,比如 :)
。请不要使用这种方法。 - gniourf_gniourf编写您的脚本add_user.sh
,如下所示(注意引号):
#!/bin/sh
adduser -u "$1" -p "$2" -g users -s /bin/bash
将其变为可执行文件:
me@somewhere$ chmod +x add_user.sh
并从 php
中调用它:
<?php
$command="/path/to/add_user.sh ".escapeshellarg($name)." ".escapeshellarg($pass);
exec ($command,$output=array(),$return_value);
if($return_value!==0) {
# Oh dear! something bad happened
}
?>
(我这里没有安装PHP,所以无法彻底测试我的答案)
如果您不想使用辅助脚本,可以直接执行以下操作:
<?php
$command="/path/to/adduser -u ".escapeshellarg($name)." -p ".escapeshellarg($pass)." -g users -s /bin/bash";
exec ($command,$output=array(),$return_value);
if($return_value!==0) {
# Oh dear! something bad happened
}
?>
$output
中获得命令的输出。escapeshellarg
比在已经构建的完整命令上调用escapeshellcmd
更安全。
passthru("add_user.sh -u $NAME -p $PASS");
。 - Jacobson$NAME
来自Web表单,那么你必须绝对确保使用正确的方法将其传递给命令行应用程序。考虑一下如果用户将; rm -rf /
作为用户名输入会发生什么...例如:http://php.net/escape_shell_arg - Marc B