htaccess Challenge: переписать совершенство для безопасной структуры сайта - PullRequest
2 голосов
/ 05 июня 2011

Я работаю над новым проектом, в котором я хочу улучшить безопасность с помощью двухуровневых папок. Папка «Core» содержит все папки, включая «public», которая должна быть единственной папкой, к которой имеет доступ посетитель.

Краткое введение в мой веб-каталог:

webdir
 | - .htaccess (core)
 | - classes
 | - functions
 | - public
      | - .htaccess (public)
      | - css
      | - files
          | - de
          | - en
          | - general
          | - nl
      | - images
      | - index.php
      | - js
      | - swf            
 | - template

Для вашей информации:

  • Мой файл public / index.php сортирует, в каком разделе находятся файлы, через [geturl] и [section]. Запрос "http://example.com/nl/openfile" указывает на:

    публичный / index.php

  • этот файл читает $ _GET и видит, что [geturl] является "openfile" в [section] "nl"

    public / index.php хочет открыть: "files / nl / openfile.php"

  • Вот как это работает, и я хочу, чтобы это работало!

Что я хочу достичь с помощью .htaccess, это следующее:

  • Сайт поддерживает 3 языка: en / de / nl. Если язык не установлен, тогда по умолчанию используется язык nl.
  • http://example.com/nl/contact необходимо указать целевой файл: public / files / nl / contact.php
  • В настоящее время, когда посетитель вводит http://example.com/nl/css (без косой черты, проблема не возникает при добавлении косой черты), сервер переводит это в http://example.com/public/css/?section=nl. Это слишком много информации для посетителя. Я не хочу, чтобы пользователи видели, где находятся файлы.
  • Общая папка не должна быть доступна напрямую. Поэтому, когда пользователь вводит http://example.com/public, это должно быть перенаправлено на http://example.com/nl/

Мои текущие файлы .htaccess:

.htaccess (ядро)

<IfModule mod_rewrite.c>
RewriteEngine on
Options +FollowSymLinks
Options -Indexes 

RewriteCond %{HTTP_HOST} ^customer.com$ [NC]
RewriteRule ^(.*)$ http://www.customer.com/$1 [R=301,L]

RewriteRule ^company(.*)$ public/$1?section=company [L]

RewriteCond %{QUERY_STRING} (.*)
RewriteRule !(nl|en|de)/(.*).*  /webdir/nl/ [R=301,L]           # IF NO LANG ISSET THAN NL REDIRECT
RewriteRule ^error(.*).*        public/?getpage=error&%1 [PT,L]
RewriteRule ^(nl|en|de)/(.*).*  public/$2?section=$1&%1 [L]
</IfModule> 

.htaccess (общедоступный)

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{QUERY_STRING} (.*)
    RewriteRule ^(.*).* index.php?geturl=$1&%1 [PT,L]
</IfModule>

Что я делаю не так и как я могу улучшить файлы .htaccess?

Подводя итог, я хочу, чтобы .htaccess сделал следующее:

  • Сайт поддерживает 3 языка: en / de / nl. Если язык не установлен, тогда по умолчанию используется язык nl.
  • http://example.com/nl/contact необходимо указать целевой файл: public / files / nl / contact.php
  • В настоящее время, когда посетитель вводит http://example.com/nl/css (без косой черты, проблема не возникает при добавлении косой черты), сервер переводит это в http://example.com/public/css/?section=nl. Это слишком много информации для посетителя. Я не хочу, чтобы пользователи видели, где находятся файлы.
  • Общедоступная папка не должна быть доступна напрямую. Поэтому, когда пользователь вводит http://example.com/public, это должно быть перенаправлено на http://example.com/nl/

1 Ответ

0 голосов
/ 05 июня 2011

Знаете ли вы, что вы можете заблокировать весь каталог, поместив .htaccess с deny from all внутри?

Таким образом, вы можете сделать структуру своего проекта более простой и переносимой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...