Зачем использовать $ _SERVER вместо ""

В форме на странице PHP вы можете использовать:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" ...> 

или

 <form action="#" ...> 

или

 <form action="" ...> 

в атрибуте действия формы. Поскольку echo $_SERVER['PHP_SELF'] не передает переменные для использования GET и вы должны использовать "" , почему вы использовали бы это или "#" ?

Я спрашиваю, потому что мне потребовалось некоторое время, чтобы понять, что переменные не передаются с помощью $_SERVER['PHP_SELF'] . Благодарю.

Related of "Зачем использовать $ _SERVER вместо """

Атрибут 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/&quot;&gt;&lt;script&gt;cookie_stealing_code()&lt;/script&gt;&lt;span class=&quot;"> 

Когда вы отправили форму, у вас был бы странный URL-адрес, но по крайней мере мой злой сценарий не запустился.

С другой стороны, если вы использовали <form action=""> , то вывод был бы таким же, независимо от того, что я добавил в свою ссылку. Это вариант, который я бы рекомендовал.

Я знаю, что вопрос – два года, но это был первый результат того, что я ищу. Я нашел хорошие ответы и надеюсь, что смогу помочь другим пользователям.

Посмотри на это

Я делаю это коротко:

  • используйте переменную $ _SERVER ["PHP_SELF"] с htmlspecialchars (): htmlspecialchars ($ _ SERVER ["PHP_SELF"]);
  • PHP_SELF возвращает имя исполняемого скрипта
  • Функция htmlspecialchars () преобразует специальные символы в объекты HTML. -> NO XSS

В дополнение к вышеприведенным ответам, другой способ сделать это: $_SERVER['PHP_SELF'] или просто использовать пустую строку – использовать __DIR__ .
ИЛИ
Если вы используете более низкую версию PHP (<5.3), более распространенной альтернативой является использование dirname(__FILE__)
Оба возвращают имя папки файла в контексте.

РЕДАКТИРОВАТЬ
Как отметил Боанн, это возвращает местоположение файла на диске. Который вы не могли бы выставить в качестве URL-адреса. В этом случае dirname($_SERVER['PHP_SELF']) может возвращать имя папки файла в контексте.

Нет никакой разницы. $ _SERVER ['PHP_SELF'] просто делает время выполнения медленнее, например, 0,000001 секунд.