2013-01-25 42 views
5

Tôi có một tập lệnh Python giao tiếp với một API. Kịch bản được bắt đầu từ một trang PHP. Tôi đã viết cả hai kịch bản, vì vậy tôi có thể thay đổi mã trong hoặc là thích hợp.Bắt đầu quy trình, ẩn đối số từ ps

Tập lệnh Python cần tên người dùng và mật khẩu để giao tiếp với API. nghiêng đầu tiên của tôi là phải vượt qua họ để Python như các đối số CLI:

<?php 
exec('python someScript.py AzureDiamond hunter2'); 
?> 

Tuy nhiên, ai đó có thể xem thông tin qua ps:

$ ps | grep someScript 
1000  23295 2.0 0.2 116852 9252 pts/0 S+ 15:47 0:00 python someScript.py AzureDiamond hunter2 

Alternatives mà tôi đang xem xét được để viết dữ liệu vào một tệp văn bản hoặc cơ sở dữ liệu sqlite, sau đó xóa chúng. Có ý tưởng nào tốt hơn không? Một ràng buộc với cách tiếp cận sqlite là điều này cần phải chạy trong một thời trang khá di động (phpFox Plugin) và hầu hết các máy chủ web ngân sách không hỗ trợ mô-đun sqlite3.

+2

Bạn có thể vượt qua nó qua đường ống có lẽ. Xem thêm proc_open() để đặt biến môi trường. –

Trả lời

1

Bạn có thể sử dụng biến môi trường mà bạn đặt trong PHP và đọc trong tập lệnh Python.

+0

Cảm ơn, tôi sẽ thử điều đó. Làm thế nào an toàn là từ những người dùng khác chạy trên hệ thống, và làm thế nào an toàn từ các quá trình khác đang chạy như cùng một người dùng (người dùng 'không ai' bởi vì Apache bắt đầu nó)? Bao lâu sau khi kịch bản PHP chết sẽ biến môi trường tồn tại, nếu kịch bản Python không tải để ghi đè lên nó? – dotancohen

+2

Câu trả lời một phần: không an toàn với các quy trình khác đang chạy với cùng một người dùng: họ có thể đọc/proc/$ PID/môi trường. –

+0

Trong trường hợp bạn đang sử dụng hệ điều hành Linux, bạn có thể đặt biến môi trường chỉ cho trình bao thực hiện trình thông dịch python bằng cách sử dụng một cái gì đó như 'exec (" USERNAME = paul PASSWORD = mypw python script.py ")' môi trường của quá trình php. Như Anton nói, môi trường vẫn hiển thị cho cùng một người dùng trong thời gian quá trình python đang chạy. – Bernhard

0

Nhìn vào vấn đề từ góc độ khác, nó có thể được giải quyết nếu bạn ẩn các ký tự đơn giản được chuyển đến exec(). Bạn đã xem xét sử dụng bất kỳ lib mật mã nào để ẩn văn bản thuần tuý khỏi người gửi và giải mã trong máy thu? Chỉ là một ý nghĩ.

1

Các phương pháp được đề xuất là vấn đề bảo mật đang chờ xảy ra. MyProxy là một cách an toàn để xử lý các khóa hoặc chứng chỉ riêng tư. MyProxy có thể không phải là giải pháp cụ thể mà bạn cần, nhưng các loại giải pháp này là những gì bạn cần phải xem xét.

http://grid.ncsa.illinois.edu/myproxy/

1

Bạn có thể sử dụng thiết bị nhập chuẩn trong quá trình python để đọc các thông số, và mở quá trình như thế này từ php:

<?php 
$handle = popen("/bin/python /var/www/someScript.py", "w"); 
// write username and password to $handle (e.g. newline separated) 
?> 

Tôi không biết làm thế nào an toàn này là chống lại quá trình khác chạy như cùng một người dùng (có thể nó bằng cách tấn công từ/proc/nn/fd/0?), nhưng nó chắc chắn làm cho nó khó hơn là chỉ nhìn vào danh sách quy trình.

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