Web sayfasındaki bir tıklama olayı üzerine kabuk komutu yürütme


11

Tarayıcıdaki bir metni tıkladığımda bir bash komutu yürütmenin bir yolu var mı?

Web sayfası A bilgisayarında, tarayıcı B bilgisayarında: B bilgisayarında kod yürütmek istiyorum, örneğin hsetrootbir görüntüyü tıklarken duvar kağıdını değiştirmek için.

Yanıtlar:


5

Gerçekten değil, hayır. Tüm güvenlik açıklarının annesi budur. İstemcinin makinesinde rasgele komutlar yürüten bir web sayfası ayarlayıp ayarlayamayacağınızı soruyorsunuz. Bu komutu çalıştıran bir web sayfası kurarsam:

rm -rf ~/

Bu işlem, bilgisayarınızdaki tüm dosyaları silecektir $HOME. Aslında, son zamanlarda bunun gerçekleşmesine izin veren bir hata keşfedildiğinde bir kargaşa vardı . Olası saldırı vektörlerinden biri, istemciyi (sizin durumunuzdaki bilgisayar B) bir bash komutu çalıştırmak için kandırmaktı.

Yani hayır, bir web tarayıcısı üzerinden yerel makinenizde rasgele kod yürütemezsiniz. Bir şekilde giriş yapmadan olmaz. JavaScript veya benzer dil komutları çalıştırabilirsiniz, ancak bunlar kullanıcının oturumuna erişemez.


Cevabınız için teşekkürler, orada bariz sorunu anlıyorum. Bunu özel bir tarayıcıyla gerçekleştirmeye çalışıyorum: stackoverflow.com/questions/30963508/…
bob dylan

@bobdylan Bunun mümkün olduğunu düşünmüyorum. Kesinlikle umarım olmaz. Bu arada havalı küçük bir program. Yapmanın bu kadar basit olduğu hakkında hiçbir fikrim yoktu! Ancak mesele şu ki, tarayıcıdan yerel bir kabuk oturumu başlatmanın mümkün olduğunu düşünmüyorum.
terdon

Diyelim ki işletim sistemime bağlı bazı işlevlere sahip karma bir web sitesi / program yapmak istiyorum. Dolayısıyla tarayıcım normal bir "tarayıcı" olmayacak. Bu yüzden bunun nasıl mümkün olmadığını göremiyorum.
bob dylan

Kesinlikle bir program yapmak mümkündür. Şunu düşünün: Prensip olarak, bir FTP istemcisi ve bir tarayıcı (bir HTTP istemcisi) arasında hiçbir fark yoktur - hem yerel bir kullanıcıyla hem de bir sunucu ile etkileşim kurar. Önemsiz olarak, FTP istemcisi yerel dosyaları değiştirebilir ve (bazı) yerel komutları yürütebilir. Elbette, sadece kullanıcının isteği üzerine, ama bu gerçek bir kısıtlama değil. Böylece bir tarayıcı da aynısını yapabilir . Yaklaşık on yıl önce, bazı büyük tarayıcıların buna izin verecek kadar düşük bir güvenlik ayarına sahip olduğunu duydum, ancak ayrıntıları hatırlamıyorum ve muhtemelen o zamandan beri işler sıkılaştırıldı.
G-Man, 'Monica'yı Yeniden Başlat' diyor

@ G-Man Bir tıklamanın tarayıcıya geri aktarılması ve bir kabuk oturumunun başlamasına neden olup olmadığını bilmiyorum. FTP, tanımı gereği bir oturum başlattığından çok farklıdır. % 100 imkansız olduğunu söylemiyorum, gerçekten bilmiyorum, sadece imkansız olduğunu düşünüyorum ve mevcut tarayıcılarda kesinlikle mümkün değil.
terdon

3

Bunu genel olarak yapamazsınız, ancak istemci makine B'yi kontrol edebileceğiniz tanımlanmış bir ortamda, makine B'nin bir kök hizmetini çalıştırmasını önerebilir, örneğin kendi başınıza nodejs veya golang ile kendi başınıza yazabilir ve bununla konuşabilirsiniz. hizmet aldığınızda olay. Ancak, B makinesine ekstra bir servis yüklemezseniz, herhangi bir şansınız yoktur (veya en azından hiç şansınız olmamalıdır).


Daha önce hiç NodeJ kullanmadım. Sen ben gibi basit javascript kullanabilirsiniz demek: run("whatever command on machine B");?
bob dylan

evet, bu gibi düşük ihtiyaçlar için nodejs kullanımı çok basittir.
ikrabbe

@ikrabbe: 500 itibara ulaştığınız için tebrikler. (Ve BTW, sevimli gravatar. Süper sincabın kedilerimin yakınında gevşemesine izin vermeyin! :-)
G-Man 'Eski Monica'yı Geri Getir'

3

Bir nodeJS sunucusu kullanarak çözmek. (temiz / nihai kod değil, çalışması)

Bilgisayar A: (sunucu)

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

Bilgisayar B: server.jsans adı verilen (istemci) dosyanodejs 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);

cevabım sizi kullanma yöntemine götürdüğü için, siz istediniz, sadece kodunuz da dahil olmak üzere cevabım için bir düzenleme istemek güzel olurdu ve bunun dışında, istediğiniz gibi bir kabuk komutunu yürütme yöntemini açıkladığım gibi ve genel bir yaklaşım. İstemci makineler için taşınabilir hizmetler yazmak çok, çok şey yapabilir. Cevabımı oylarsanız bu da iyi olur.
ikrabbe

2
@ikrabbe OP oy veremez, temsilciler yok. Kabul etmeye gelince, evet cevabınız (ki ben oy verdim) gerçekten onlara bir işaretçi verdiler, ancak nodej'leri nasıl kullanabileceklerini ve bir örnek vermediniz. Cevabınız çok faydalı oldu ama OP'nin problemini gerçekten çözmedi, sadece doğru yöne işaret etti. Kendi cevaplarını göndermek ve kabul etmek mükemmel bir şekilde tamam.
terdon

0

PHP metin dosyalarının içeriğini tarayıcıdan değiştirebilir, örneğin /var/www/.../folder/mytextfie.txt içinde .

bir cronjob, textfile dosyasının yürütülebilir olup olmadığını kontrol etmek için çalıştırılabilir.

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

bu metin dosyasının içeriği:

#!/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 döngüsü ile bu metin dosyasından komutları çalıştırmak mümkündür.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.