Webページのクリックイベント時にシェルコマンドを実行する


11

ブラウザでテキストをクリックしたときにbashコマンドを実行する方法はありますか?

ウェブページはコンピュータAにあり、ブラウザはコンピュータBにあります。たとえばhsetroot、画像をクリックしたときに壁紙を変更するために、コンピュータBでコードを実行したいです。

回答:


5

いいえ、違います。それはすべてのセキュリティホールの母です。クライアントのマシンで任意のコマンドを実行するWebページをセットアップできるかどうかを尋ねています。このコマンドを実行するWebページを設定するとどうなりますか。

rm -rf ~/

これにより、内のすべてのファイルが削除されます$HOME。実際、これを可能にするバグが発見されたとき最近大騒ぎがありました。考えられる攻撃ベクトルの1つは、クライアント(この場合はコンピューターB)をだましてbashコマンドを実行させることでした。

したがって、いいえ、ローカルマシン上でWebブラウザを介して任意のコードを実行することはできません。どういうわけか最初にログインせずにはいられません。JavaScriptまたは同様の言語のコマンドを実行できますが、ユーザーのセッションにアクセスすることはできません。


答えてくれてありがとう、私はそこに明らかな問題を理解しています。:私は、カスタムのブラウザであることを達成しようとしているstackoverflow.com/questions/30963508/...
ディランボブ

@bobdylan可能だとは思いません。とにかくそうでないことを願っています。ところで、それはクールな小さなプログラムです。こんなに簡単にできるとは思いもしませんでした。ただし、ポイントは、ブラウザーからローカルシェルセッションを開始することはできないと思います。
terdon

さて、OSにリンクされたいくつかの機能を備えたハイブリッドWebサイト/プログラムを作成したいとしましょう。そのため、私のブラウザは通常の「ブラウザ」にはなりません。だからそれがどうしてできないのかわかりません。
bob dylan 2015年

確かに、プログラムが実行することは可能です。考えてみてください。原則として、FTPクライアントとブラウザ(HTTPクライアント)の間に違いはありません。どちらもローカルユーザーとサーバーと対話します。簡単に言うと、FTPクライアントはローカルファイルを変更し、(一部の)ローカルコマンドを実行できます。確かに、それはユーザーの要求によるものだけですが、それは実際の制約ではありません。したがって、ブラウザで同じことができます。約10年前、一部の主要なブラウザーのセキュリティ設定が低すぎて許可できないと聞いたことがありますが、詳細は覚えていません。
G-Manは 'Reinstate Monica'

@ G-Manクリックがブラウザに戻され、シェルセッションが開始される可能性があるかどうかはわかりません。FTPは、定義によりセッションを開始するため、非常に異なります。100%不可能だと言っているわけではありません。本当にわかりません。不可能だと思っているだけで、既存のブラウザでは不可能です。
terdon

3

一般的にはできませんが、クライアントマシンBを制御できる定義された環境では、マシンBがsetrootサービスを実行することを提案できます。たとえば、nodejsまたはgolangを使用して独自に書き込み、それと対話できます。あなたがイベントを受け取ったときにサービス。しかし、いずれにしても、マシンBに追加のサービスをインストールしなければ、チャンスはありません(または、少なくともチャンスはありません)。


これまでNodeJを使用したことがありません。つまり、次のような単純なjavascriptを使用できますrun("whatever command on machine B");
bob dylan 2015年

はい、nodejsは、そのような減少したニーズのために使用するのが非常に簡単です。
ikrabbe

@ikrabbe:評判500に達しました。おめでとうございます。(そして、ところで、かわいいグラバター。猫の近くであなたのスーパーリスを放さないでください!:-)
G-Manは、 'Reinstate Monica'

3

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);" />

コンピューター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);

私の答えが使用するメソッドにあなたを導いたので、あなたが尋ねたように、あなたのコードを含めて、あなたが尋ねたようにシェルコマンドを実行するメソッドを説明しているのでそれを除いて、私の答えの編集を求めるだけでいいでしょうとその一般的なアプローチ。クライアントマシン用のポータブルサービスを作成すると、さまざまなことができます。あなたが私の答えに投票するならば、それも大丈夫でしょう。
ikrabbe

2
@ikrabbe OPは投票できません。担当者がいません。受け入れることに関しては、はい、あなたの答え(私が投票した)は確かに彼らに指針を与えましたが、あなたは彼らがnodejsをどのように使用できるを説明たり、例を挙げたりしませんでした。あなたの答えはとても役に立ちましたが、それは実際にはOPの問題を解決しませんでした、それは彼らを正しい方向に向けるだけでした。自分の答えを投稿してそれを受け入れるのはまったく問題ありません。
terdon

0

PHPは、たとえば/var/www/.../folder/mytextfie.txtのように、ブラウザを介してテキストファイルの内容を変更できます。そのファイルから文字列を取得するだけで、スクリプトを開始するコマンドまたはコマンドにすることができます。 。

cronjobを実行して、テキストファイルに実行可能ファイルが含まれているかどうかを確認できます。

#!/usr/bin/env bash
echo $(cat /var/www/.../folder/commandsperline.txt)
#or 
while read line
    do
    echo "$(${line})"
done< "/var/www/.../folder/commandsperline.txt"

そのテキストファイルのコンテキスト:

#!/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

te whileループを使用すると、そのテキストファイルからコマンドを実行できます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.