Блочный специфический PHP-файл в конкретной папке [дубликат]

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

84
задан davidkonrad 11 February 2015 в 15:35
поделиться

5 ответов

В файле htaccess область действия директивы <Files> применима только к этому каталогу (я полагаю, чтобы избежать путаницы, когда правила / директивы в htaccess подкаталогов будут применяться с суперпотоками от родителя).

Итак, вы можете иметь:

<Files "log.txt">
Order Allow,Deny
Deny from all
</Files>

В файле htaccess в вашем каталоге inscription. Или вы можете использовать mod_rewrite для сортировки дескриптора. Оба случая запрещают доступ к файлу htaccess, а также log.txt:

RewriteRule /?\.htaccess$ - [F,L]

RewriteRule ^/?inscription/log\.txt$ - [F,L]
150
ответ дан Jon Lin 19 August 2018 в 12:25
поделиться
  • 1
    Если вы используете IIS, сделайте это в файле web.config. – Shaun Luttin 3 November 2014 в 17:33
  • 2
    Использование правил перезаписи запрещает мой собственный код доступа к содержимому * .txt. Как бы вы обошли это? – Pantss 6 December 2015 в 06:34
  • 3
    & quot; область действия директивы <Files> применима только к этому каталогу " - Нет, нет. Он относится к этому каталогу и ко всем подкаталогам под ним. Таким образом, <Files "log.txt"> поймает /log.txt и /inscription/log.txt. – MrWhite 30 January 2017 в 16:45

Поместите нижнюю строку в ваш .htaccess файл и замените имя файла как хотите

RewriteRule ^(test\.php) - [F,L,NC]
1
ответ дан Community 19 August 2018 в 12:25
поделиться

Я не верю, что принятый в настоящее время ответ правильный. Например, у меня есть следующий файл .htaccess в корне виртуального сервера (apache 2.4):

<Files "reminder.php">
require all denied
require host localhost
require ip 127.0.0.1
require ip xxx.yyy.zzz.aaa
</Files>

Это предотвращает внешний доступ к reminder.php, который находится в подкаталоге. У меня есть аналогичный файл .htaccess на моем сервере Apache 2.2 с тем же эффектом:

<Files "reminder.php">
        Order Deny,Allow
        Deny from all
        Allow from localhost
        Allow from 127.0.0.1
     Allow from xxx.yyy.zzz.aaa
</Files>

Я не знаю точно, но я подозреваю, что это попытка определить подкаталог, особенно в .htaccess, viz <Files ./inscription/log.txt>, что приводит к сбою. Было бы проще поместить файл .htaccess в тот же каталог, что и log.txt, то есть в каталог inscription, и он будет работать там.

9
ответ дан MrWhite 19 August 2018 в 12:25
поделиться
  • 1
    Вы получаете мой upvote, это сработало и для моего apache 2.4. – Tschallacka 24 January 2018 в 21:38

Ну, вы можете использовать тег <Directory>, например:

<Directory /inscription>
  <Files log.txt>
    Order allow,deny
    Deny from all
  </Files>
</Directory>

Не использовать ./, потому что если вы просто используете /, он смотрит на корневую директорию вашего сайта.

Для более подробного примера посетите http://httpd.apache.org/docs/2.2/sections.html

-4
ответ дан Nicholas English 19 August 2018 в 12:25
поделиться
  • 1
    Но контейнер <Directory> не разрешен в .htaccess. В .htaccess сам файл .htaccess является контейнером & quot; Directory & quot; (файл конфигурации для каждого каталога). – MrWhite 30 January 2017 в 14:47
  • 2
    Ну, тогда вы можете использовать Redirect. Redirect /inscription/log.txt access_denied.html Это перенаправит пользователя в access_denied.html, если пользователь перейдет к inscription/log.txt в каталоге надписей. – Nicholas English 30 January 2017 в 15:47

Сильное совпадение с образцом - это метод, который я использую здесь в скоропортящемся прессе. Используя сильное сопоставление шаблонов, этот метод предотвращает внешний доступ к любому файлу, содержащему «.hta», «.HTA» или любую их нечувствительную к регистру комбинацию. Для иллюстрации этот код предотвратит доступ через любой из следующих запросов:

  • .htaccess
  • .HTACCESS
  • .hTaCcEsS
  • testFILE.htaccess
  • filename.HTACCESS
  • FILEROOT.hTaCcEsS

и т. д. и т. д. Ясно, что этот метод очень эффективен для защиты файлов HTAccess вашего сайта. Кроме того, этот метод также включает в себя укрепляющую директиву «Удовлетворить все». Обратите внимание, что этот код должен быть помещен в файл HTAccess вашего домена:

# STRONG HTACCESS PROTECTION
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>
14
ответ дан Yaşar Xavan 19 August 2018 в 12:25
поделиться
  • 1
    При использовании этого кода я получаю ошибку внутреннего сервера 500. Любая идея почему? Я использую Wordpress. – Keryn Gill 26 January 2015 в 22:25
  • 2
    Разве не имеет смысла просто запрещать пользователям получать доступ к dotfiles? Используя что-то вроде <Files ~"^\..*">. – Time Sheep 15 November 2016 в 10:12
Другие вопросы по тегам:

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