Как предотвратить добавление дополнительных строк после URL-адресов, заканчивающихся на .php?

команда нашего веб-сайта только что обнаружила, что любой пользователь может добавить косую черту '/', а затем любую строку после URL-адреса, который заканчивается расширением .php, и при этом получить доступ к той же исходной странице.

Например: я могу получить доступ к www.mydomain.com/index.php с помощью:

  • www.mydomain.com/index.php/test
  • www.mydomain.com/index.php/test/123
  • www.mydomain.com/index.php/wqeqwew/2234dwd

(Примечание: дополнительных строк после index.php/ на сервере нет, это просто мусор)

Другая проблема заключается в том, что с моими динамическими URL-адресами я всегда могу добавить несуществующий файл php между моим доменным именем и первым параметром.

Например: я могу получить доступ к www.mydomain.com/product/one с помощью:

  • www.mydomain.com/test.php/product/one
  • www.mydomain.com/imnother.php/product/one

Как я могу предотвратить это и как с этим бороться? Является ли это серьезной проблемой с точки зрения SEO или безопасности? Я хочу, чтобы веб-сайт возвращал ошибку 404 всякий раз, когда такие URL-адреса вводятся или нажимаются в браузере.

Любая помощь приветствуется. Спасибо!

ИЗМЕНИТЬ:

Я думаю, что уже исправил это. Для первой проблемы я добавил AcceptPathInfo Off в свой .htaccess. И для второй проблемы я просто добавил ^ перед своим RewriteRule для моего динамического URL-адреса, например. RewriteRule ^product/(.*)$, чтобы никто не мог добавить лишнюю строку между доменным именем и первым параметром. Спасибо за помощь!


person jcap    schedule 23.11.2012    source источник
comment
Покажите нам свои mod_rewrite правила (файл .htaccess).   -  person shadyyx    schedule 23.11.2012
comment
Я могу понять, почему вы беспокоитесь. Но это определенно не проблема безопасности и ничего не значит для вашего SEO. Единственный способ, которым это может что-то сделать для вашего SEO, — это если кто-то разместил ссылку где-то с некоторыми произвольными ключевыми словами в URL-адресе, но это в любом случае вне вашего контроля. А что касается безопасности, если ваш скрипт не ожидает их параметры, то вряд ли они что-то могут сделать :)   -  person galdikas    schedule 23.11.2012
comment
Я мог бы придумать эксплойт, когда это можно было бы использовать не по назначению. Предположим, что какие-то Ваши скрипты разбирают URL и что-то делают с его частями. Тогда есть хотя бы возможность XSS-атаки...   -  person shadyyx    schedule 23.11.2012


Ответы (1)


Как я могу предотвратить это и как с этим бороться?

Это связано с директивой Apache AcceptPathInfo. Вы можете отключить его - если сервер настроен соответствующим образом, вам просто понадобится файл .htaccess для него.

Является ли это серьезной проблемой с точки зрения SEO или безопасности?

Я не могу придумать, как это может быть серьезной проблемой. Обычно он включен по умолчанию в большинстве обработчиков и обычно используется как «бедный человек mod_rewrite» (способ предоставления причудливых URL-адресов).

person Pekka    schedule 23.11.2012
comment
SEO — а как насчет дублированного (множественного) контента? Хотя эти несуществующие URL-адреса, вероятно, не будут найдены в контенте, все же существует вероятность ошибки, допущенной при создании контента, когда неправильная (но ошибочно работающая) ссылка была проиндексирована... - person shadyyx; 23.11.2012
comment
@shadyyx Это возможная проблема, но я сомневаюсь, что Google не знает об этой функции и не наказывает за дублирование контента, если оно вызвано внешними ссылками. - person Pekka; 23.11.2012
comment
Спасибо, @Pekka за ответ. Мне просто добавить AcceptPathInfo Off куда-нибудь в мой файл .htaccess? Я пытался это сделать, но ничего не произошло. Спасибо еще раз! - person jcap; 24.11.2012
comment
@jcap да, это идея ... Если это не сработает, возможность изменить эти параметры в .htaccess может быть отключена в конфигурации сервера. В этом случае вам придется поговорить с администратором сервера. Другой вариант — выйти из сценария и отправить заголовок 404, если установлен $_SERVER["PATH_INFO"], но вам придется делать это для каждого файла PHP отдельно. - person Pekka; 24.11.2012
comment
@Pekka, теперь я понял. Это не сработало из-за правила RewriteRule, которое я добавил, чтобы разрешить удаление расширения .php из моего URL-адреса. Я удалил его, и AcceptPathInfo Off заработало. Спасибо за помощь! - person jcap; 24.11.2012