2010-05-21 40 views
6

Tôi muốn thực thi tệp .exe trên máy chủ Apache của tôi bằng tập lệnh php. các thủ tục như sau:cách thực hiện chương trình .exe bằng tập lệnh php

  1. dùng đến, lấp đầy một dạng html

  2. nó goses đến một kịch bản php

  3. php script thực thi name.exe tập tin

  4. php in đầu ra của tệp name.exe trên trang.

tôi thực hiện name.exe thường từ cửa sổ như thế này:

run--> cmd--> D:\name [command]

các name.exe cần phải giao tiếp với các tập tin khác như thư viện trong cùng thư mục.

các COMAND hoàn toàn trong cmd tại cửa sổ là như thế này:

D:\name library.dll [input from user]

sau đó chương trình thực thi và in một số kết quả trong cửa sổ cmd.

Tôi thực sự muốn chạy chương trình này trên máy chủ của tôi dưới hình thức khách hàng của tôi. Tôi không biết làm thế nào, nhưng bây giờ tôi có một cách để làm điều này.

Một câu hỏi khác có liên quan, có vỏ nào mà tôi có thể cài đặt trên máy chủ Linux và thực thi name.exe trong đó không?

Trả lời

6

Hãy suy nghĩ lại giải pháp của bạn vì điều này có thể sẽ tạo ra nhiều vấn đề hơn (đặc biệt là các vấn đề an ninh) hơn là giải quyết.Bởi có một kịch bản PHP thực hiện chương trình của bạn, bạn chạy các nguy cơ người dùng nhập vào sau vào hình của bạn:

John Doe; rm \windows\* 

hoặc

John Doe; rm d:\name\* 

Bạn muốn giới hạn người dùng nhập vào một tập con thật điều khiển để bạn sẽ không bị tiêm lệnh độc hại.

PHP cung cấp exec() nhưng rất cẩn thận.

+0

cảm ơn tôi sẽ. Đó là một bài thơ tốt. Tôi có thể kiểm tra đầu vào với định dạng của tôi trước khi cho phép nó thực thi bằng tập lệnh php. Nhưng vấn đề là có thể giải quyết được với 'exec()'? vì vậy tôi có thể nghiên cứu sử dụng nó. – John

+0

Việc thực thi các chương trình bên ngoài không phải là vấn đề lớn với việc chăm sóc và thoát tất cả các dữ liệu đến bằng 'escapeshellarg()'. –

2

Bạn có thể muốn passthru() hoặc exec().

Đối với Linux, nếu name.exe chạy tốt dưới WINE, có lẽ bạn sẽ muốn sử dụng passthru() hoặc shell_exec() và gọi WINE để chạy name.exe. Tôi không biết tên file.exe là gì, vì vậy ngay cả khi nó chạy trong RƯỢU, không có gì đảm bảo rằng nó thực sự sẽ là hoạt động.

Tuy nhiên, không có trình bao ma thuật cho phép Linux thực thi các tệp thực thi tùy ý của Windows.

Như đã đề cập, hãy rất cẩn thận về những gì bạn cho phép để có được exec() hoặc passthru() hoặc bất cứ điều gì khác mà thực thi mã bên ngoài của kịch bản của bạn. Tôi sẽ không đi xa như để nói rằng bạn có lẽ không nên làm bất cứ điều gì đó là bạn đang làm, nhưng tôi không phải là người làm việc trên bất cứ điều gì bạn đang làm việc trên :)

+2

Cũng không yêu cầu PHP * không * được chạy trong Windows/IIS. –

+0

Trên thực tế, 'exec' sẽ trả về dòng cuối cùng sau khi thực thi lệnh. Trong khi ['passthru'] (http://www.php.net/manual/en/function.passthru.php) hoạt động như OP muốn. – 0x2D9A3

+0

cảm ơn bạn rất nhiều Tim. – John

0

Đây là một ý tưởng rất tồi. Ngoài việc cấp quyền vô lý cho tài khoản người dùng mà máy chủ web của bạn đang thực thi, điều này cho phép mọi người truy cập vào trang web của bạn khả năng chạy các tệp thi hành, bạn có thể gặp phải các vấn đề về an toàn chủ đề, sự cố khóa hệ thống tệp và các vấn đề khác.

Nếu bạn hoàn toàn phải sử dụng exe này, hãy tạo một hệ thống xếp hàng. Yêu cầu trang web của bạn đưa yêu cầu biểu mẫu vào một kho lưu trữ thuận tiện (ví dụ, một cơ sở dữ liệu) và có một cuộc thăm dò ý kiến ​​dịch vụ cơ sở dữ liệu định kỳ để chạy quy trình này. Điều này cho phép tách tài khoản người dùng và quyền liên quan cho trang web và exe, loại bỏ mọi vấn đề thực hiện đồng thời và giảm thời gian chờ phản hồi cho trang web của bạn.

Một số ngôn ngữ (ho) cho phép bạn tạo dịch vụ này và mã trang web của bạn bằng cùng một ngôn ngữ/công nghệ, nhưng trong trường hợp này bạn sẽ phải tách ra ngôn ngữ .NET hoặc ngôn ngữ được biên dịch khác để tạo dịch vụ.

+0

cảm ơn, nhưng câu hỏi đầu tiên của tôi là có thể, ý tưởng của tôi sẽ hoạt động? sau đó tôi sẽ nghĩ về vấn đề an ninh, có một hệ thống đăng nhập và chỉ bạn bè của tôi có thể sử dụng hệ thống, tôi chắc chắn về bảo mật, nhưng nhiệm vụ của tôi là: ý tưởng đó có thể với PHP không? – John

+0

John, không có cách nào để đảm bảo rằng chỉ có bạn bè của bạn sẽ sử dụng hệ thống. Đó là * lý do tại sao * chúng tôi được yêu cầu xem xét bảo mật trong bất kỳ ứng dụng nào. Ngoài ra, lưu ý rằng có các vấn đề về chức năng khi chơi, không chỉ bảo mật. –

+0

Chúng tôi không biết gì về lệnh 'tên'. Có lẽ nó là an toàn? Có lẽ anh ta chạy máy chủ web của mình với tư cách là người dùng chỉ có quyền truy cập vào lệnh đó. Có lẽ chương trình 'tên' có thể có nhiều tiến trình đang chạy cùng một lúc mà không có vấn đề đồng thời. Điểm của bạn vẫn hợp lệ, nhưng chúng không thể giải quyết được. –

2

Bạn nên thoát khỏi đầu vào của người dùng bằng escapeshellarg trước khi gửi cho lệnh.

$saferinput = escapeshellarg($input); 
system('D:\name library.dll '.$saferinput); 
+0

điểm tốt Emil, cảm ơn :) – John

0

Tôi nghĩ chúng tôi có thể thực hiện việc này bằng cách kết nối với máy chủ bằng cách sử dụng PHP SSH. Có một thư viện (http://phpseclib.sourceforge.net/) cho phép bạn kết nối với máy chủ thông qua SSH. Trước đó tôi đã thử kết nối với máy chủ bằng telnet và execte .exe. Nhưng quản trị viên trường học của tôi đã chặn telnet vì lý do bảo mật, vì vậy tôi cần phải làm việc trên ssh.

Các vấn đề liên quan