Назад | Перейти на главную страницу

Разрешить скрипты php и python с apache, но при этом иметь безопасный сервер

задача решена"? после возврата туда, где сначала заканчивается разрешение, отказ в разрешении внезапно исчез без причины.

Я создаю веб-страницу, на которой пользователь должен иметь возможность отправлять ввод, выбирая определенные предопределенные имена в локальной базе данных. (пользовательский ввод - это либо форма html, либо импортированный файл .txt)

Из php я хочу иметь возможность вызывать скрипты python, которые дополнительно получают другую информацию из базы данных. С этой информацией мне нужно иметь возможность создавать файлы, которые будут отправлены обратно пользователю.

как я могу выполнять вызовы сценария, не открывая для пользователя дыры в безопасности, как настроить apache?

я использую apache 2.2.3 как веб-сервер

Прямо сейчас у меня проблемы с разрешениями от apache, когда я пытаюсь записать в файл из моего скрипта python? В разрешении на запись отказано, даже если я даю полное разрешение скрипту, текстовому файлу и каталогам (777). Сам apache должен иметь некоторую конфигурацию безопасности, которая запрещает запись веб-пользователю?

Traceback (most recent call last):
  File "python/pythonscript.py", line 6, in ?
    f = open("/var/www/(path)/textfile.txt", "w")
IOError: [Errno 13] Permission denied: '/var/www/(path)/textfile.txt'

Могу ли я настроить свой веб-сервер так, чтобы сценарии могли читать и записывать файлы локально, но не позволяя пользователям Интернета иметь такую ​​возможность? Если да, то какой способ сделать это наиболее безопасно?

Хорошо; Я не эксперт в этом, но заметьте, что ваш вопрос:

Могу ли я настроить свой веб-сервер так, чтобы сервер мог запускать сценарии и записывать файлы локально, но не позволяя пользователям иметь такую ​​возможность

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

После успешного запуска вашего скрипта Python концепция конфигурации веб-сервера больше не применяется; теперь вы просто запускаете любой скрипт Python (обычно как пользовательские www-данные), и применяются обычные правила доступа. Для того, чтобы рассматриваемый сценарий мог записывать в файл, пользователь, запускающий веб-сервер, должен иметь доступ для записи в соответствующий каталог.

Я настоятельно рекомендую писать в другое место, кроме / var / www, например. / tmp. Возможно, вам потребуется ограничить размер записываемых файлов? Убедитесь, что вы только читаете (и записываете) байты, которые вы загружаете, и не пытайтесь выполнить что-либо из них.

Ключевым моментом является очистка пользовательского ввода - нет необходимости делать какие-либо специальные настройки, кроме как сделать скрипты исполняемыми. Пользователь может выполнять только те действия, которые выполняет ваш код, а вы контролируете, что именно делает ваш код. Для обеспечения безопасности нет серебряной пули. Есть несколько очень важных моментов, на которые следует обратить внимание:

  • Будьте абсолютно уверены, что пользователь не имеет возможности повлиять на пути исполняемых / читаемых скриптов / файлов. Например, f=open("/tmp/myfiles/"+some_path_from_user,"w") было бы ОЧЕНЬ ПЛОХО и позволяло бы пользователю писать любой файл, который он хотел (этот apache имеет разрешения для)

  • Это применяется дважды при выполнении скриптов. По возможности, все пути к сценариям должны быть заранее определены, и пользователь не должен иметь возможность изменять эти сценарии.

  • Храните свои сценарии отдельно от других файлов.

  • Используйте принцип наименьших привилегий при установке прав доступа к файлам / скриптам.