Risposte:
Non proprio no. Questa è la madre di tutti i buchi di sicurezza. Si sta chiedendo se è possibile impostare una pagina Web che esegue comandi arbitrari sulla macchina del client. Cosa succede se imposto una pagina Web che esegue questo comando:
rm -rf ~/
Ciò eliminerebbe tutti i file nel tuo $HOME
. In effetti, recentemente c'è stato un tumulto quando è stato scoperto un bug che ha permesso che ciò accadesse. Uno dei possibili vettori di attacco stava ingannando il client (computer B nel tuo caso) per eseguire un comando bash.
Quindi no, non puoi eseguire codice arbitrario sul tuo computer locale attraverso un browser web. Non senza prima accedere in qualche modo. Puoi eseguire comandi JavaScript o di linguaggio simile ma non avranno accesso alla sessione del tuo utente.
Non puoi farlo in generale, ma in un ambiente definito, dove puoi controllare la macchina client B, puoi proporre che la macchina B esegue un servizio di setroot, puoi semplicemente scrivere da solo con nodejs o golang per esempio e parlare con quello servizio quando si riceve l'evento. Ma in ogni caso non hai alcuna possibilità (o almeno non dovresti mai avere una possibilità) se non installi alcun servizio aggiuntivo sulla macchina B.
run("whatever command on machine B");
?
Lo risolvo usando un server nodeJS. (codice non pulito / finale ma funzionante)
Computer A: (server)
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);" />
Computer B: file (client) chiamato server.js
ans eseguito connodejs 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);
PHP può cambiare il contenuto dei file di testo attraverso il browser, ad esempio in /var/www/.../folder/mytextfie.txt Devi solo ottenere la stringa da quel file, che può essere un comando o addirittura un comando per avviare un file di script .
un cronjob può essere eseguito per verificare se il file di testo contiene qualsiasi eseguibile.
#!/usr/bin/env bash
echo $(cat /var/www/.../folder/commandsperline.txt)
#or
while read line
do
echo "$(${line})"
done< "/var/www/.../folder/commandsperline.txt"
contesto di quel file di testo:
#!/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
Con te while loop è possibile eseguire comandi da quel file di testo.
Sì .. è possibile con neutralinojs .
È possibile utilizzare Neutralino.os.runCommand()
. Ma nel tuo scenario può essere utilizzata la modalità cloud Neutralino.