В форме на странице PHP вы можете использовать:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" ...>
или
<form action="#" ...>
или
<form action="" ...>
в атрибуте действия формы. Поскольку echo $_SERVER['PHP_SELF']
не передает переменные для использования GET
и вы должны использовать ""
, почему вы использовали бы это или "#"
?
Я спрашиваю, потому что мне потребовалось некоторое время, чтобы понять, что переменные не передаются с помощью $_SERVER['PHP_SELF']
. Благодарю.
Атрибут action
умолчанию будет иметь текущий URL. Это самый надежный и простой способ сказать «отправьте форму на то же место, откуда она появилась».
Нет смысла использовать $_SERVER['PHP_SELF']
, а #
не отправляет форму вообще (кроме случаев, когда обработчик события submit
прилагается, который обрабатывает представление).
Использование пустой строки прекрасно и на самом деле намного безопаснее, чем просто использовать $_SERVER['PHP_SELF']
.
При использовании $_SERVER['PHP_SELF']
очень просто вводить вредоносные данные, просто добавляя /<script>...
после части страницы $_SERVER['PHP_SELF']
URL-адреса, поэтому вы не должны использовать этот метод и прекратить использование любого учебника PHP, который предлагает это.
Когда вы вставляете какую-либо переменную в HTML, если вы не хотите, чтобы браузер интерпретировал эту переменную как HTML, лучше всего использовать htmlspecialchars()
. Помимо прочего, он не позволяет хакерам вставлять произвольный HTML-код на вашу страницу.
Значение $_SERVER['PHP_SELF']
берется непосредственно из URL-адреса, введенного в браузере. Поэтому, если вы используете его без htmlspecialchars()
, вы позволяете хакерам напрямую манипулировать htmlspecialchars()
вашего кода.
Например, если я пришлю вам ссылку на http://example.com/"><script>malicious_code_here()</script><span class="
и у вас есть <form action="<?php echo $_SERVER['PHP_SELF'] ?>">
, Вывод будет:
<form action="http://example.com/"><script>malicious_code_here()</script><span class="">
Мой скрипт будет запущен, и вы не будете мудрее. Если вы вошли в систему, я, возможно, украл ваши файлы cookie или распечатал конфиденциальную информацию с вашей страницы.
Однако, если вы использовали <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>">
, Выход был бы:
<form action="http://example.com/"><script>cookie_stealing_code()</script><span class="">
Когда вы отправили форму, у вас был бы странный URL-адрес, но по крайней мере мой злой сценарий не запустился.
С другой стороны, если вы использовали <form action="">
, то вывод был бы таким же, независимо от того, что я добавил в свою ссылку. Это вариант, который я бы рекомендовал.
Я знаю, что вопрос – два года, но это был первый результат того, что я ищу. Я нашел хорошие ответы и надеюсь, что смогу помочь другим пользователям.
Посмотри на это
Я делаю это коротко:
В дополнение к вышеприведенным ответам, другой способ сделать это: $_SERVER['PHP_SELF']
или просто использовать пустую строку – использовать __DIR__
.
ИЛИ
Если вы используете более низкую версию PHP (<5.3), более распространенной альтернативой является использование dirname(__FILE__)
Оба возвращают имя папки файла в контексте.
РЕДАКТИРОВАТЬ
Как отметил Боанн, это возвращает местоположение файла на диске. Который вы не могли бы выставить в качестве URL-адреса. В этом случае dirname($_SERVER['PHP_SELF'])
может возвращать имя папки файла в контексте.
Нет никакой разницы. $ _SERVER ['PHP_SELF'] просто делает время выполнения медленнее, например, 0,000001 секунд.