Удостоверьтесь, что пользовательский путь безопасен в PHP

Рассмотрим, что делает auto_mkindex: он создает файл tclIndex, который содержит

set auto_index(print_name) [list source [file join $dir TypeA.tcl]]
set auto_index(dummy) [list source [file join $dir TypeA.tcl]]
set auto_index(::TypeB::print_name) [list source [file join $dir TypeB.tcl]]

Когда вы namespace import TypeB::*, тогда tcl выполняет source [file join $dir TypeB.tcl], и процесс print_name вытягивается в глобальное пространство имен.

Что происходит, когда вы звоните dummy? this: source [file join $dir TypeA.tcl] - тянет процесс dummy в глобальное пространство имен. Но в то же время, print_name процесс переопределен .

На этом этапе вы все равно можете позвонить TypeB::print_name

Вам нужно будет выполнить одно из:

  • реструктурировать свой код,
  • изменить выполните namespace import TypeB::*, или
  • , очень внимательно относитесь к порядку, в котором вы называете вещи, например, сначала вызывая dummy .
7
задан anonymous coward 11 May 2009 в 09:18
поделиться

1 ответ

Возможно, вам пригодится realpath () .

realpath () расширяет все символические ссылки и разрешает ссылки на '/./' , '/../' и лишние '/' символы в входной путь и возвращает канонизированный абсолютный путь.

Однако эта функция предполагает, что рассматриваемый путь действительно существует. Он не будет выполнять канонизацию для несуществующего пути. В этом случае возвращается FALSE.

9
ответ дан 7 December 2019 в 03:20
поделиться
Другие вопросы по тегам:

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