2012-02-13 6 views
0

연락처 양식이 있습니다. 내 서버에서 호스팅 할 때 제대로 작동하지만 클라이언트 서버에 업로드 할 때 문제가 발생했습니다. 가정 ''PHP_SELF ''E에 - 정의되지 않은 상수 'PHP_SELF'의 사용 : : \ 도메인 \의 C I 얻을 형태PHP 폼 - 정의되지 않은 상수 'PHP_SELF'

공지 사항의 상단에 다음과 같은 오류 http://www.conceptonegfx.com/contact.php

: 여기 페이지를 확인하시기 바랍니다 \ conceptonegfx.com \ user \ htdocs \ fns.php 42 행

공지 사항 : 정의되지 않은 색인 : 'PHP_SELF'in 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> 

답변

6

이 문제 또는 복사 붙여 넣기 것은 있지만 경우 확실하지 :

’PHP_SELF’ 

정말

'PHP_SELF' 

이 rdlowrey의 게시물에서 manual

편집에서보세요해야한다은 : 매우 안전하지 않으므로 $ _SERVER [ 'PHP_SELF']을 사용하지 마십시오. 다음과 같이 action 속성을 비워두기 만하면됩니다. action = "". 비어있는 액션은 POST가 폼이 원래의 주소로 오게 할 것입니다 (PHP_SELF를 사용하는 것과 같지만 보안 단점은 없습니다).

+0

@rdlowrey 거기에 물건을 추가하고 신용을 줬습니다. – Iznogood

+0

신용은 필요없고 정확합니다. Downvote가 취소되었습니다, upvote 주어진. 모두가 물건을 놓친다. 중요한 점은 누군가가 빠뜨린 것을 발견하거나 잘못했을 때 답을 수정하는 것입니다. – rdlowrey

-2

코드를 복사하여 붙여 넣은 것 같습니다.

''을 수정하십시오. 당신이 대신 $_SERVER[’PHP_SELF’]

+0

-1'$ _SERVER [ 'PHP_SELF']'는 XSS 공격에 취약합니다. 이것은 언급되어야한다. – rdlowrey

5

$_SERVER['PHP_SELF']로 변경

'의 사용 HVE주의 사항 당신은 아무도 언급하지 않았다 문제가 몇 가지있다. 전체에서, 문제는 다음과 같습니다

  • 첫째, 매우 안전한 아니라 당신이$_SERVER['PHP_SELF']을 사용할 수 없습니다.
  • 둘째, 대신 작은 따옴표의 역 따옴표를 사용 : $_SERVER[’PHP_SELF’]$_SERVER['PHP_SELF']
  • 셋째해야한다, 당신의 HTML이 끊어집니다.

당신이 지정한 코드 고려해

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

action=로 폼의 클래스 속성을 지정하고 id 속성 전에 분리 된 큰 따옴표 다음에 임의의 PHP 코드 조각 잎을.

올바른 <form> 사양은 다음과 같아야합니다

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

UPDATE

요청으로, 여기 $_SERVER['PHP_SELF']XSS attacks에 취약한 이유를 몇 가지 더 해설은 ...

우선 , $_SERVER['PHP_SELF']은 ma 일 수 있음을 이해합니다. 사용자가 조작합니다. 어떻게 이것이 가능한지 물을 수 있습니다. 결국 /mypage.php에있는 스크립트의 경우 $_SERVER['PHP_SELF']은 항상 /mypage.php과 같지 않아야합니다.

반드시 그렇지는 않습니다.

Apache (그리고 경험이없는 다른 서버)는 전체 URL이 특정 리소스와 일치하지 않는 경우 파일 일치를 위해 URL을 "뒤로"내려다 보도록 허용하는 URL과 함께 되돌림 기능을 사용합니다. mypage.php 실제 읽을 수있는 웹 루트에있는 파일이 아닌 디렉토리의 이름입니다 예를 들어, 다음과 같은 주소가 mypage.php 파일에 일치하는 항목을 찾을 수 있습니다 :

http://domain.com/mypage.php/pretty-url < <은 --- 아파치가 제공/mypage.php

이 시점에서 "그게 좋겠지 만 어떻게 XSS에 취약합니까?"라고 생각할 수도 있습니다.

내가 궁금한 것이 있습니다. 다음과 같은 시나리오를 생각해보십시오 :

  1. 당신은 그것의 행동 특성에 $_SERVER['PHP_SELF']을 사용 /mypage.php에서 양식을 가지고있다.
  2. 악의적 인 사용자가 그녀의 주소 표시 줄에 다음을 넣어하기로 결정 :

http://domain.com/mypage.php/%22%3E%3Cscript%3Ealert ('pwned') %의 3C/스크립트 % 갑자기

3E

, 당신은으로서 지정된 HTML :

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

지금과 같이 렌더링 :

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

"pwned"라는 경고가 팝업으로 표시되기 때문에 이것은 매우 무해한 예입니다. 그러나, 사악한 사람은 자바 스크립트 코드를 사용하여 훨씬 더 이상한 일을 할 수 있습니다.

당신은 는 이럴 그냥이 시나리오에서 모두를 피하기 위해 최선의, 그러나, 당신의 $_SERVER['PHP_SELF'] 변수에 htmlentities를 사용하여이 특정 문제를 방지 할 수있다.

+0

PHP_SELF의 문제에 대해 좀 더 설명해 주시겠습니까? – vascowhite

+0

@vascowhite 귀하의 의견에 따라 설명을 추가했습니다. – rdlowrey

관련 문제