Executa um comando shell em um evento de clique em uma página da web

7

Existe uma maneira de executar um comando bash quando clico em um texto em um navegador?

A página da web está no computador A, o navegador está no computador B: desejo executar o código no computador B, por exemplo, hsetroot para alterar o papel de parede ao clicar em uma imagem.

    
por bob dylan 21.06.2015 / 12:15

5 respostas

2

Eu resolvo usando um servidor nodeJS. (código 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: (cliente) arquivo chamado server.js ans executado com nodejs 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);
    
por 25.06.2015 / 07:31
4

Não é verdade, não. Essa é a mãe de todos os buracos de segurança. Você está perguntando se pode configurar uma página da Web que executa 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 . Na verdade, houve recentemente um alvoroço quando um bug foi descoberto permitiu que isso acontecesse. Um dos possíveis vetores de ataque estava enganando o cliente (computador B no seu caso) para executar um comando bash.

Portanto, não é possível executar código arbitrário em sua máquina local por meio de um navegador da web. Não sem de alguma forma entrar primeiro. Você pode executar JavaScript ou comandos de idioma semelhantes, mas eles não terão acesso à sessão do usuário.

    
por 21.06.2015 / 12:32
2

Você não pode fazer isso em geral, mas em um ambiente definido, onde você pode controlar a máquina cliente B, você pode propor que a máquina B execute um serviço setroot, você pode simplesmente escrever por conta própria com nodejs ou golang por exemplo e fale com esse serviço quando você receber o evento. Mas em qualquer caso você não tem nenhuma chance (ou pelo menos você nunca deveria ter uma chance) se você não instalar algum serviço extra na máquina B.

    
por 23.06.2015 / 22:36
0

O PHP pode alterar o conteúdo de arquivos de texto através do navegador, por exemplo, em /var/www/.../folder/mytextfie.txt Você só precisa obter a string desse arquivo, que pode ser um comando ou até mesmo um comando para iniciar um arquivo de script.

um cronjob pode rodar para checar se o arquivo de texto contém algum 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 while, é possível executar comandos a partir desse arquivo de texto.

    
por 16.04.2018 / 20:25
0

Sim .. é possível com neutralinojs .

Você pode usar Neutralino.os.runCommand() . Mas no seu cenário o modo de nuvem Neutralino pode ser usado.

Espero que ajude!

    
por 30.09.2018 / 04:29