У меня есть скрипт Python, который взаимодействует с API. Сценарий запускается со страницы PHP. Я написал оба сценария, поэтому я могу изменить код в любом подходящем.

Скрипт Python требует имени пользователя и пароля для взаимодействия с API. Мое первое желание - передать их Python в качестве аргументов CLI:

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

Тем не менее, любой может увидеть учетные данные через ps:

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

Альтернативы, которые я рассматриваю, - записать данные в текстовый файл или базу данных sqlite, а затем удалить их. Есть ли лучшие идеи? Недостатком подхода sqlite является то, что он должен работать довольно переносимо (плагин phpFox), и большинство бюджетных хостов не поддерживают модуль sqlite3.

5
dotancohen 25 Янв 2013 в 17:58

4 ответа

Лучший ответ

Вы можете использовать переменные окружения, которые вы устанавливаете в PHP и читаете в скрипте Python.

1
Bernhard 25 Янв 2013 в 14:11

Вы можете использовать stdin в процессе python для чтения параметров и открыть процесс следующим образом из php:

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

Я не знаю, насколько это защищено от других процессов, запущенных от имени того же пользователя (может ли это быть взломано из / proc / nn / fd / 0?), Но это, безусловно, усложняет задачу, чем просто просмотр списка процессов.

1
Michael 26 Янв 2013 в 13:43

Предложенные методы являются проблемой безопасности, ожидающей своего появления. MyProxy - это безопасный способ обработки закрытых ключей или сертификатов. MyProxy может быть не тем решением, которое вам нужно, но эти типы решений - то, на что вам нужно обратить внимание.

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

1
Bmayer0122 26 Янв 2013 в 05:07

Если посмотреть на проблему с другой стороны, ее можно решить, если скрыть простые символы, передаваемые в exec (). Рассматривали ли вы использование какой-либо криптографической библиотеки, чтобы скрыть простой текст от отправителя и расшифровать в получателе? Просто мысль.

0
code82 25 Янв 2013 в 14:03