I'm have a raspbian running on a raspberry pi3, I'm making a system that requires the person to choose the hostname by typing it into a field. And to swap the hostname, I need to change two files inside the /etc/ folder.
I have already managed to make these changes by the sed command, however since I want the person to choose the hostname, I made a form for PHP and wanted to take this variable by POST and pass it on to the sed command.
<link rel="stylesheet" type="text/css" href="css/style.css">
<form method="POST">
<input type="text" name="hostname">
<input type="submit" name="Comentar" value=" Salvar">
</form>
<?php
if(isset($_POST['Comentar'])){
echo "botão foi clicado"."<br/>";
$SEU_HOSTNAME = $_POST["hostname"];
echo "hostname digitado: ".$SEU_HOSTNAME;
shell_exec ('
cd /etc/
sudo sed -i "s/nome/${SEU_HOSTNAME}/" hosts
sudo sed -i "s/nome/${SEU_HOSTNAME}/" hostname
');
}
?>
Only {} appears in the file that is modified. Would anyone know what I could change?
In PHP you need to use double quotes for a string if you want to pass a variables into it.
Additionally if you want to pass user input as a shell script argument, you need to sanitize it, otherwise user will be able to execute any shell script on your machine. In PHP you can use escapeshellarg for this.
Finally, your code should look like this:
$HOSTNAME=escapeshellarg("s/nome/$SEU_HOSTNAME/");
shell_exec ("
cd /etc/
sudo sed -i $HOSTNAME hosts
sudo sed -i $HOSTNAME hostname
");