Напишите сценарий, который принимает [closed]

El usuario de Apache siempre podrá leer una gran parte del sistema de archivos. Tanto por diseño como por defecto, muchas ubicaciones se dejan legibles (y, a veces, ejecutables )para todos los usuarios. Esto no es, en sí mismo, un problema.

Lo que debe asegurarse es que 1 )Apache no entregará documentos fuera de un conjunto específico de directorios y que 2 )PHP no puede acceder a ningún directorio que no contenga los archivos PHP de su aplicación.

1 )Use las entradas para limitar el acceso y asegurarse de que no haya valores predeterminados no seguros en ningún archivo de configuración. Esto es un poco tangencial a su pregunta ya que lo que está sirviendo los archivos es PHP, no apache. Pero aún es importante tener en cuenta;

2 )Habilite el modo seguro y configure las directivas doc _root y open _basedir para garantizar que PHP esté restringido a un árbol de directorios en particular, por ejemplo open_basedir="/var/www/htdocs//";. Estas opciones de configuración se pueden establecer en muchos lugares :desde php.ini del sistema a archivos php.ini dedicados de vhost, hasta directivas de apache pasadas al intérprete de php, etc.

-3
18.11.2018, 11:14
2 ответа

Это невозможно. Вы не можете явно «вернуть» рабочий каталог до запуска скрипта. Потому что у скрипта нет разумного способа изменить рабочий каталог вызывающего абонента. См.:Как изменить рабочий каталог запуска оболочки с помощью скрипта? Я игнорирую последнее предложение и продолжаю.

#!/bin/sh
PREFIX="$1"
DIR="$2"
if [ -z "$DIR" ]; then;
    ls -d -- "$1"*
else
    cd -- "$DIR" &&
    ls -d -- "$1"*/
fi

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

В вопросе говорится, что путь абсолютный, поэтому он всегда будет начинаться с /и никогда не начинаться с -. cd "$PATH"будет достаточно. Однакоls --является строго необходимым.

Обратите внимание, что каталоги — это тип файла. Форма сценария с двумя аргументами -требуется только для перечисления каталогов. Одна форма аргумента -просто необходима для вывода списка файлов. Помимо каталогов и обычных файлов, к файлам относятся специальные файлы для блочных устройств, символьных устройств, сокетов и именованных каналов (, также известных как «fifo» ).

Linux (и другие реализации )расширяют список типов файлов. Linux включает в себя один, который не является «ни одним из вышеперечисленных», который я видел, когда команда statпечатает как «странный файл ».

0
28.01.2020, 05:19
#!/bin/sh

( cd -- "${2:-.}" && ls -d -- "$1"*${2:+/} )

То есть,

  1. cdв каталог, заданный вторым аргументом, или в ., если второй аргумент не указан или он пуст. --запрещает cdинтерпретировать что-либо в $2как вариант.
  2. выполнить ls -dдля всех имен, начинающихся с первого аргумента. -dпредотвращает перечисление содержимого любых каталогов с соответствующими именами каталогов. --запрещает lsинтерпретировать что-либо в $1как вариант. Если задан второй аргумент, в конце шаблона будет /и, следовательно, он будет соответствовать только именам каталогов.

Все это происходит в подоболочке, так что cdне меняет рабочий каталог остальной части скрипта (, на что, как я полагаю, намекает последнее предложение ). В любом случае сценарий не сможет изменить рабочий каталог для вызывающей оболочки, если только эта оболочка не использует sourceдля запуска сценария, а подоболочка не предотвратит этого. Таким образом, рабочий каталог восстанавливается ("возвращается" )к тому состоянию, в котором он был до запуска сценария.

2
28.01.2020, 05:19

Теги

Похожие вопросы