Jalankan perintah shell pada acara klik di halaman web

11

Apakah ada cara untuk menjalankan perintah bash ketika saya mengklik teks di browser?

Halaman web di komputer A, browser di komputer B: Saya ingin mengeksekusi kode di komputer B, misalnya hsetrootuntuk mengubah wallpaper ketika mengklik gambar.

bob dylan
sumber

Jawaban:

5

Tidak juga, tidak. Itu adalah ibu dari semua lubang keamanan. Anda bertanya apakah Anda dapat mengatur halaman web yang mengeksekusi perintah sewenang-wenang pada mesin klien. Bagaimana jika saya mengatur halaman web yang menjalankan perintah ini:

rm -rf ~/

Itu akan menghapus semua file di file Anda $HOME. Bahkan, baru-baru ini ada keributan ketika bug ditemukan yang memungkinkan ini terjadi. Salah satu vektor serangan yang mungkin adalah menipu klien (komputer B dalam kasus Anda) agar menjalankan perintah bash.

Jadi tidak, Anda tidak dapat mengeksekusi kode arbitrer pada mesin lokal Anda melalui browser web. Bukan tanpa masuk entah bagaimana terlebih dahulu. Anda dapat menjalankan JavaScript atau perintah bahasa serupa tetapi mereka tidak akan memiliki akses ke sesi pengguna Anda.

terdon
sumber
Terima kasih atas jawabannya, saya mengerti masalah yang jelas di sana. Saya mencoba mencapainya dengan browser khusus: stackoverflow.com/questions/30963508/…
bob dylan
@ Bobdylan, saya pikir itu tidak mungkin. Saya tentu berharap tidak. Omong-omong, itu adalah program kecil yang keren. Saya tidak tahu itu sesederhana itu untuk dilakukan! Intinya, bagaimanapun, saya pikir tidak mungkin untuk memulai sesi shell lokal dari browser.
terdon
Yah katakanlah saya ingin membuat situs web / program hybrid dengan beberapa fungsi yang terhubung ke OS saya. Jadi browser saya tidak akan menjadi "browser" yang normal. Jadi saya tidak melihat bagaimana itu tidak mungkin.
bob dylan
Tentu saja mungkin bagi suatu program untuk melakukannya. Pertimbangkan: pada prinsipnya tidak ada perbedaan antara klien FTP dan browser (klien HTTP) - keduanya berinteraksi dengan pengguna lokal dan dengan server. Secara sepele, klien FTP dapat memodifikasi file lokal dan menjalankan (beberapa) perintah lokal. Tentu, itu hanya atas permintaan pengguna, tetapi itu bukan kendala nyata. Jadi browser dapat melakukan hal yang sama. Saya mendengar, sekitar sepuluh tahun yang lalu, bahwa beberapa browser utama memiliki pengaturan keamanan yang sangat rendah sehingga mereka mengizinkannya, tetapi saya tidak ingat detailnya, dan banyak hal yang mungkin diperketat sejak saat itu.
G-Man Mengatakan 'Reinstate Monica'
@ G-Man Saya tidak tahu apakah mungkin klik dikembalikan ke browser dan menyebabkan sesi shell dimulai. FTP sangat berbeda sejak memulai sesi menurut definisi. Saya tidak mengatakan itu 100% mustahil, saya tidak benar-benar tahu, saya hanya berpikir itu tidak mungkin dan tentu saja tidak mungkin dengan browser yang ada.
terdon
3

Anda tidak dapat melakukan itu secara umum, tetapi dalam lingkungan yang ditentukan, di mana Anda dapat mengontrol mesin klien B, Anda dapat mengusulkan bahwa mesin B menjalankan layanan setroot, Anda hanya dapat menulis sendiri dengan nodejs atau golang misalnya dan berbicara dengan itu layanan saat Anda menerima acara. Tetapi dalam hal apa pun Anda tidak memiliki peluang (atau setidaknya Anda seharusnya tidak memiliki kesempatan) jika Anda tidak menginstal beberapa layanan tambahan pada mesin B.

ikrabbe
sumber
Saya tidak pernah menggunakan NodeJs sebelumnya. Anda berarti saya dapat menggunakan javascript sederhana seperti: run("whatever command on machine B");?
bob dylan
ya, nodejs sangat mudah digunakan untuk mengurangi kebutuhan tersebut.
ikrabbe
@ikrabbe: Selamat atas pencapaian 500 reputasi. (Dan, BTW, gravatar imut. Jangan biarkan bajing supermu lepas di dekat kucing-ku! :-)
G-Man Mengatakan 'Reinstate Monica'
3

Saya menyelesaikannya menggunakan server nodeJS. (tidak bersih / kode final tetapi berfungsi)

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

Komputer B: file (klien) yang disebut server.jsans dieksekusi dengannodejs 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);
bob dylan
sumber
karena jawaban saya mengarahkan Anda ke metode yang akan digunakan, yang Anda minta, akan lebih baik jika hanya meminta edit untuk jawaban saya, termasuk kode Anda dan kecuali ketika saya menjelaskan metode untuk menjalankan perintah shell, seperti yang Anda minta untuk dan ini merupakan pendekatan umum. Menulis layanan portabel untuk mesin klien dapat melakukan banyak hal. Jika Anda memilih jawaban saya, itu juga oke.
ikrabbe
2
@ikrabbe OP tidak dapat memilih, mereka tidak memiliki perwakilan. Sedangkan untuk menerima, ya jawaban Anda (yang saya lakukan upvote) memang memberi mereka pointer tetapi Anda tidak menjelaskan bagaimana mereka bisa menggunakan nodejs juga tidak Anda memberi contoh. Jawaban Anda sangat berguna tetapi tidak benar-benar menyelesaikan masalah OP, hanya mengarahkan mereka ke arah yang benar. Posting jawaban mereka sendiri dan menerimanya tidak apa-apa.
terdon
0

PHP dapat mengubah konten file teks melintasi browser misalnya di /var/www/.../folder/mytextfie.txt Anda hanya perlu mendapatkan string dari file itu, whitch dapat berupa perintah atau bahkan perintah untuk memulai file skrip .

cronjob dapat dijalankan untuk memeriksa apakah textfile mengandung executable.

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

konteks file teks itu:

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

Dengan te while loop dimungkinkan untuk menjalankan perintah dari file teks itu.

stefansson
sumber
0

Ya .. itu mungkin dengan neutralinojs .

Anda bisa menggunakannya Neutralino.os.runCommand(). Tetapi dalam skenario Anda, mode cloud Neutralino dapat digunakan.

Shalitha Suranga
sumber