Respostas:
Não, realmente não. Essa é a mãe de todas as falhas de segurança. Você está perguntando se pode configurar uma página da Web que execute comandos arbitrários na máquina do cliente. E se eu configurar uma página da Web que execute este comando:
rm -rf ~/
Isso excluiria todos os arquivos no seu $HOME
. De fato, houve recentemente um alvoroço quando um bug foi descoberto, permitindo que isso acontecesse. Um dos possíveis vetores de ataque foi enganar o cliente (computador B no seu caso) para executar um comando bash.
Portanto, não, você não pode executar código arbitrário em sua máquina local por meio de um navegador da web. Não sem, de alguma forma, fazer login primeiro. Você pode executar comandos JavaScript ou idioma semelhante, mas eles não terão acesso à sessão do usuário.
Você não pode fazer isso em geral, mas em um ambiente definido, onde você pode controlar a máquina cliente B, pode propor que a máquina B execute um serviço setroot, basta escrever por conta própria com nodejs ou golang, por exemplo, e conversar com isso serviço ao receber o evento. Mas, de qualquer forma, você não tem chance (ou pelo menos nunca deve ter uma chance) se não instalar algum serviço extra na máquina B.
run("whatever command on machine B");
:?
Eu resolvo isso usando um servidor nodeJS. (código não limpo / final, mas está funcionando)
Computador A: (servidor)
function change_wallpaper(image){
var objReq = new XMLHttpRequest();
objReq.open("GET", "http://localhost:8888" + "?image=" + image, false);
objReq.send(null);
}
<img src="./img/1.jpeg" onclick="change_wallpaper(this.src);" />
<img src="./img/2.jpeg" onclick="change_wallpaper(this.src);" />
Computador B: arquivo (cliente) chamado server.js
ans executado comnodejs server.js
var http = require("http");
var sys = require('sys')
var exec = require('child_process').exec;
var url = require("url");
function onRequest(request, response) {
var params = url.parse(request.url,true).query;
function puts(error, stdout, stderr) {sys.puts(stdout)}
exec("/usr/bin/feh --bg-center " + params.image, puts);
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Wallpaper');
}
http.createServer(onRequest).listen(8888);
O PHP pode alterar o conteúdo dos arquivos de texto no navegador, por exemplo, em /var/www/.../folder/mytextfie.txt. .
um cronjob pode ser executado para verificar se o arquivo de texto contém qualquer executável.
#!/usr/bin/env bash
echo $(cat /var/www/.../folder/commandsperline.txt)
#or
while read line
do
echo "$(${line})"
done< "/var/www/.../folder/commandsperline.txt"
contexto desse arquivo de texto:
#!/bin bash
#you need to declare absolute path
# chmod 755 /home/user/*.sh -to make executabble all scripts there
/home/user/backup.sh
/home/user/anyscript.sh
Com o loop te while é possível executar comandos a partir desse arquivo de texto.
Sim .. é possível com neutralinojs .
Você pode usar Neutralino.os.runCommand()
. Mas no seu cenário, o modo de nuvem Neutralino pode ser usado.