Форма PHP - неопределенная константа "PHP_SELF" - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть контактная форма, она отлично работает при размещении на моем сервере, но когда я загрузил ее на свой клиентский сервер, у меня возникли проблемы.Пожалуйста, проверьте страницу здесь: http://www.conceptonegfx.com/contact.php

В верхней части формы я получаю следующие ошибки

Примечание: использование неопределенной константы 'PHP_SELF' - предполагается '' PHP_SELF '' вE: \ Domains \ c \ conceptonegfx.com \ user \ htdocs \ fns.php в строке 42

Примечание: неопределенный индекс: 'PHP_SELF' в E: \ Domains \ c \ conceptonegfx.com \ user \ htdocs\ fns.php в строке 42 "id =" uploadform "enctype =" multipart / form-data ">

Вот проблемные строки в файле fns.php:

 <?php
//start session
 if(!isset($_SESSION)) 
 { 
 session_start(); 
 }  


  // prints form
   function print_form(){
   ?>


<form method="post" class="action="<?php echo $_SERVER[’PHP_SELF’];?>" id="uploadform" enctype="multipart/form-data">
<p><label for="namefrom">Name <span class="required">*</span></label>
<input name="namefrom" id="namefrom" type="text" class="field" value="<?= $_SESSION['myForm']['namefrom']; ?>" tabindex="1"/></p>

<p><label for="emailfrom">Email <span class="required">*</span></label>
<input name="emailfrom" id="emailfrom" type="text" class="field" value="<?= $_SESSION['myForm']['emailfrom']; ?>" tabindex="3"/></p>

<p><label for="phone">Phone</label>
<input name="phone" id="phone" type="text" class="field" value="<?= $_SESSION['myForm']['phone']; ?>" tabindex="4"/></p>

<p><label for="message">Message <span class="required">*</span></label>
<textarea name="comments" id="comments" rows="10" cols="35" align="left" class="field" tabindex="6"><?= $_SESSION['myForm']['comments']; ?></textarea></p>

<p><label for="attachment">File Upload<br /></label>
<input name="attachment" id="attachment" type="file" tabindex="7">

<p><input align="left" type="submit" name="submit" id="submit" value="Send Email"  tabindex="8"/></p>
<p><input type="hidden" name="submitted"  value="true" /></p>
</form> 

Ответы [ 3 ]

6 голосов
/ 13 февраля 2012

Не уверен, что это проблема или проблема с копированием, но:

’PHP_SELF’

действительно должно быть

'PHP_SELF'

Посмотрите руководство

Редактировать из поста rdlowrey: Вы не должны использовать $ _SERVER ['PHP_SELF'], так как он не очень безопасен.Просто оставьте атрибут действия пустым, как это: action = "".Пустое действие приведет к отправке формы по адресу, по которому она возникла (аналогично использованию PHP_SELF, но без недостатков безопасности).

5 голосов
/ 13 февраля 2012

У вас есть пара вопросов, о которых никто не упомянул.В целом, ваши проблемы:

  • Во-первых, вы не должны использовать $_SERVER['PHP_SELF'], поскольку это не очень безопасно.
  • Во-вторых, выиспользуя обратные кавычки вместо одинарных кавычек: $_SERVER[’PHP_SELF’] должно быть $_SERVER['PHP_SELF']
  • В-третьих, ваш HTML не работает.

Рассмотрим код, который вы указали:

class="action="<?php echo $_SERVER[’PHP_SELF’];?>" id="uploadform"

Указывает атрибут класса вашей формы как action= и оставляет случайный фрагмент php, сопровождаемый осиротевшей двойной кавычкой перед атрибутом id.

Правильная спецификация <form> должнабыть:

<form method="post" action="" id="uploadform" enctype="multipart/form-data">

ОБНОВЛЕНИЕ

В соответствии с просьбой, здесь приведено еще одно объяснение того, почему $_SERVER['PHP_SELF'] уязвим для XSS-атак ...

Во-первых, поймите, что пользователь может манипулировать $_SERVER['PHP_SELF'].Вы можете спросить, как это возможно?В конце концов, для сценария, расположенного в /mypage.php, не должно $_SERVER['PHP_SELF'] всегда равняться /mypage.php?

Не обязательно.

Apache (и, возможно, другие серверы, которых у меня нетопыт работы с) использовать функцию обратного просмотра с URL-адресами, которая позволяет просматривать «назад» URL-адрес для совпадений файлов, если полный URL-адрес не соответствует конкретному ресурсу.Например, следующий адрес найдет совпадение в файле mypage.php, если mypage.php является фактически читаемым файлом в webroot, а не именем каталога:

http://domain.com/mypage.php/pretty-url << --- apache обслуживает /mypage.php</p>

В этот момент вы можете подумать: «Это хорошо, но как это уязвимо для XSS?»

I 'Я рад, что ты спросил.Рассмотрим следующий сценарий:

  1. У вас есть форма на /mypage.php, которая использует $_SERVER['PHP_SELF'] в своем атрибуте действия.
  2. Злоумышленник решает поместить следующее в свою адресную строку:

http://domain.com/mypage.php/%22%3E%3Cscript%3Ealert('pwned')%3C/script%3E

Внезапно HTML, который вы указали как:

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

Теперь отображается так:

<form action="/mypage.php/"><script>alert('pwned')</script>

Это довольно безобидный пример, потому что все, что он делает, - это всплывающее предупреждение с надписью "pwned".Тем не менее, гнусный человек может использовать подобный код javascript, чтобы делать гораздо более неприятные вещи.

Вы можете избежать этой конкретной проблемы, используя htmlentities в вашей переменной $_SERVER['PHP_SELF'], однако IMHO в этом сценарии лучше всего всего этого избежать.

0 голосов
/ 13 февраля 2012

Вы, кажется, скопировали код.

Исправить ''. Обратите внимание, что вы использовали вместо '

Изменить $_SERVER[’PHP_SELF’] на $_SERVER['PHP_SELF']

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