Thực hiện lệnh shell khi có sự kiện nhấp chuột trong trang web


11

Có cách nào để thực thi lệnh bash khi tôi nhấp vào văn bản trong trình duyệt không?

Trang web trên máy tính A, trình duyệt trên máy tính B: Tôi muốn thực thi mã trên máy tính B, ví dụ: hsetrootđể thay đổi hình nền khi nhấp vào hình ảnh.

Câu trả lời:


5

Không thực sự, không. Đó là mẹ của tất cả các lỗ hổng bảo mật. Bạn đang hỏi liệu bạn có thể thiết lập một trang web thực thi các lệnh tùy ý trên máy của khách hàng không. Điều gì xảy ra nếu tôi thiết lập một trang web chạy lệnh này:

rm -rf ~/

Điều đó sẽ xóa tất cả các tập tin trong của bạn $HOME. Trên thực tế, gần đây đã có một sự náo động khi một lỗi được phát hiện cho phép điều này xảy ra. Một trong những vectơ tấn công có thể là lừa khách hàng (máy tính B trong trường hợp của bạn) chạy lệnh bash.

Vì vậy, không, bạn không thể thực thi mã tùy ý trên máy cục bộ của mình thông qua trình duyệt web. Không phải không có cách nào đó đăng nhập đầu tiên. Bạn có thể chạy JavaScript hoặc các lệnh ngôn ngữ tương tự nhưng chúng sẽ không có quyền truy cập vào phiên người dùng của bạn.


Cảm ơn câu trả lời, tôi hiểu vấn đề rõ ràng ở đó. Tôi đang cố gắng để đạt được điều đó với một trình duyệt tùy chỉnh: stackoverflow.com/questions/30963508/ cấp
bob dylan

@bobdylan Tôi không nghĩ điều đó là có thể. Tôi chắc chắn hy vọng nó không phải là anyway. Nhân tiện, đó là một chương trình nhỏ thú vị. Tôi không biết nó đơn giản để làm! Tuy nhiên, vấn đề là tôi không nghĩ có thể bắt đầu phiên shell cục bộ từ trình duyệt.
terdon

Vâng, hãy nói rằng tôi muốn tạo một trang web / chương trình lai với một số chức năng được liên kết với hệ điều hành của tôi. Vì vậy, trình duyệt của tôi sẽ không phải là một "trình duyệt" bình thường. Vì vậy, tôi không thấy làm thế nào nó không thể.
bob dylan

Chắc chắn đó là một chương trình có thể làm được. Xem xét: về nguyên tắc, không có sự khác biệt giữa máy khách FTP và trình duyệt (máy khách HTTP) - cả hai đều tương tác với người dùng cục bộ và với máy chủ. Một cách tầm thường, máy khách FTP có thể sửa đổi các tệp cục bộ và thực thi (một số) lệnh cục bộ. Chắc chắn, đó chỉ là theo yêu cầu của người dùng, nhưng đó không phải là một ràng buộc thực sự. Vì vậy, một trình duyệt có thể làm như vậy. Tôi đã nghe nói, khoảng mười năm trước, một số trình duyệt chính có cài đặt bảo mật thấp đến mức họ cho phép điều này, nhưng tôi không nhớ chi tiết và có lẽ mọi thứ đã được thắt chặt kể từ đó.
G-Man nói 'Phục hồi Monica'

@ G-Man Tôi không biết liệu có thể nhấp chuột trở lại trình duyệt hay không và khiến phiên shell bắt đầu. FTP rất khác nhau do đó bắt đầu một phiên theo định nghĩa. Tôi không nói điều đó là không thể 100%, tôi thực sự không biết, tôi chỉ nghĩ rằng điều đó là không thể và chắc chắn là không thể với các trình duyệt hiện có.
terdon

3

Nói chung, bạn không thể làm điều đó, nhưng trong một môi trường xác định, nơi bạn có thể điều khiển máy khách B, bạn có thể đề xuất rằng máy B chạy dịch vụ setroot, ví dụ bạn có thể tự viết bằng nodejs hoặc golang và nói chuyện với nó dịch vụ khi bạn nhận được sự kiện. Nhưng trong mọi trường hợp, bạn không có bất kỳ cơ hội nào (hoặc ít nhất là bạn sẽ không bao giờ có cơ hội) nếu bạn không cài đặt một số dịch vụ bổ sung trên máy B.


Tôi chưa bao giờ sử dụng NodeJ trước đây. Ý bạn là tôi có thể sử dụng một javascript đơn giản như : run("whatever command on machine B");?
bob dylan

vâng, nodejs rất đơn giản để sử dụng cho những nhu cầu giảm như vậy.
ikrabbe

@ikrabbe: Chúc mừng bạn đã đạt được 500 danh tiếng. (Và, BTW, gravatar dễ thương. Đừng để con sóc siêu nhỏ của bạn thả lỏng gần những con mèo của tôi! :-)
G-Man nói 'Tái lập lại' '

3

Tôi giải quyết nó bằng máy chủ nodeJS. (không sạch / mã cuối cùng nhưng nó hoạt động)

Máy tính A: (máy chủ)

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

Tệp B: (máy khách) được gọi là server.jsans được thực thi vớinodejs 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);

vì câu trả lời của tôi đã dẫn bạn đến phương pháp sử dụng, bạn đã yêu cầu, thật tuyệt khi chỉ yêu cầu chỉnh sửa cho câu trả lời của tôi, bao gồm mã của bạn và ngoại trừ khi tôi mô tả một phương thức để thực thi lệnh shell, như bạn đã hỏi cho và một cách tiếp cận chung của nó. Viết dịch vụ di động cho máy khách có thể làm nhiều, nhiều việc. Nếu bạn bỏ phiếu cho câu trả lời của tôi thì cũng sẽ ổn thôi.
ikrabbe

2
@ikrabbe OP không thể bình chọn, họ không có đại diện. Đối với việc chấp nhận, có, câu trả lời của bạn (mà tôi đã đưa ra) thực sự đã cho họ một con trỏ nhưng bạn không giải thích làm thế nào họ có thể sử dụng nodejs và bạn cũng không đưa ra một ví dụ. Câu trả lời của bạn rất hữu ích nhưng nó không thực sự giải quyết được vấn đề của OP, nó chỉ chỉ cho họ đi đúng hướng. Đăng câu trả lời của riêng họ và chấp nhận nó là hoàn toàn OK.
terdon

0

PHP có thể thay đổi nội dung của các tệp văn bản qua trình duyệt chẳng hạn trong /var/www/.../folder/mytextfie.txt Bạn chỉ phải lấy chuỗi từ tệp đó, whitch có thể là lệnh hoặc thậm chí là lệnh để bắt đầu tệp tập lệnh .

một cronjob có thể chạy để kiểm tra xem văn bản có chứa bất kỳ tệp thực thi nào không.

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

bối cảnh của textfile đó:

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

Với te while loop, có thể thực thi các lệnh từ tệp văn bản đó.


0

Vâng .. nó có thể với neutinojs .

Bạn có thể sử dụng Neutralino.os.runCommand(). Nhưng trong kịch bản của bạn, chế độ đám mây Neutralino có thể được sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.