对网页中的点击事件执行 shell 命令

bob*_*lan 16 shell browser events

当我单击浏览器中的文本时,有没有办法执行 bash 命令?

网页在计算机 A 上,浏览器在计算机 B 上:我想在计算机 B 上执行代码,例如hsetroot在单击图像时更改墙纸。

ter*_*don 7

不是真的,不是。这是所有安全漏洞的根源。你问你是否可以设置一个在客户端机器上执行任意命令的网页。如果我设置一个运行此命令的网页会怎样:

rm -rf ~/
Run Code Online (Sandbox Code Playgroud)

这将删除您的$HOME. 事实上,当发现允许这种情况发生的错误时,最近引起了轩然大波。可能的攻击媒介之一是欺骗客户端(在您的情况下是计算机 B)运行 bash 命令。

所以不,你不能通过网络浏览器在本地机器上执行任意代码。并非没有以某种方式先登录。您可以运行 JavaScript 或类似的语言命令,但它们无法访问您用户的会话。


bob*_*lan 5

我使用 nodeJS 服务器解决了它。(不是干净/最终代码,而是它的工作原理)

电脑A:(服务器)

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);" />
Run Code Online (Sandbox Code Playgroud)

计算机 B:(客户端)文件调用server.jsans 执行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);
Run Code Online (Sandbox Code Playgroud)

  • @ikrabbe OP 不能投票,他们没有代表。至于接受,是的,您的回答(我确实赞成)确实给了他们一个指针,但您没有解释_如何_他们可以使用 nodejs,也没有给出示例。您的回答非常有用,但并没有真正解决 OP 的问题,它只是为他们指明了正确的方向。发布他们自己的答案并接受它是完全可以的。 (3认同)