2014-09-29 2 views
1

사실 여러 질문이 있습니다. 그러나 그들은 관련되어 있습니다.PHP - 자체 양식 게시 및 종료

먼저 자체 게시물을 사용하여 양식을 제출하는 것이 바람직하지 않습니까? 보안 문제가 있습니까? 내가 자체 게시물을 사용하기로 결정한 이유는 내가 사용하고있는 파일/폴더 구조와 서버 측 프로그래밍 언어를 공개하고 싶지 않았기 때문입니다.

예를 들어, 이것은 분명히 내가 php를 사용하고 있으며 logout.php 파일이 형제 수준의 로그 아웃 폴더에 있음을 보여줍니다.

이 예와
<form action="../logout/logout.php" method="post"> 
    //form elements goes here 
</form> 

, 내가 사용하고 있지만, 프로그래머가 명확하게 논리가 먼저 자체를 통해 갈 필요가 있다는 것이 자기 포스트는 것을 알고 어떤 서버 측 언어가 표시되지 않습니다

<?php 
    if (isset($_POST['log_out'])) 
    { 
    // do some stuff 
    } 
?> 
<form method="post"> 
    //form elements goes here 
</form> 

내가 깨달은 자기 게시의 결과는 모든 자기 게시 페이지의 시작 부분에 복잡한 논리를 가져야한다는 것입니다. 이러한 로직은 적절한 실행 코드를 선택해야하며 때로는 리디렉션하고 나머지 코드는 실행하지 않도록해야합니다.

예를 들어, 여기에는 여러 가지를 수행하고 자체에 게시하는 페이지가 있습니다. 위해서는 코드의 나머지 부분이나 html을 다시 실행을 중지하려면 PHP 함수 "exit"를 사용해야합니다.

<?php 
    if (isset($_POST['add_two_numbers'])) 
    { 
    // code for adding two numbers 
    exit(); 
    } 
    else if (isset($_POST['add_three_numbers'])) 
    { 
    // code for adding three numbers 
    exit(); 
    } 
    else if (isset($_POST['log_out'])) 
    { 
    // destroy session and data before logging out 
    header("location: ./logout/logout.php"); 
    exit(); 
    } 

    // php code that should happen if there is no post logic and 
    // will be unapropiately executed if exit is not used 
?> 

<html> 
    <head> 
    <script> 
    function init() 
    { 
     // will do stuff if php did not exit properly 
    } 

    // more js code 

    window.onload = init; 

그래서, 나는이 문제를 일으키는 방법에 대해 많은 것을 읽을 PHP를 종료 명령을 사용해야하고 그것은 나쁜 일부는 대신에 사용 반환을 제안한다. 그러나 반환 문제는 HTML 부분을 계속 실행하지 못하도록 코드를 항상 멈추게하지는 않는다는 것입니다. 이렇게하는 더 좋은 방법이 있습니까?

감사합니다.

+3

난 당신이 읽어 봤는데 알고 있지만, 자기 게시하지 않습니다 그리고 나가는 것은 정당하다. –

+3

_ "나는 파일/폴더 구조와 서버 측 프로그래밍 언어를 밝히고 싶지 않았습니다."_ - 그 말도 안되는 논쟁입니다. 모호함에 의한 보안이 작동하지 않습니다. – CBroe

+0

서버 측 언어가 php라는 사실을 숨기려고한다면 파일 확장자는 애매하게 만들 필요가있는 많은 것들 중 하나 일뿐입니다. 어쨌든 @CBroe는 은폐가 보안 성이 없다고 말합니다. – andrew

답변

1

매번 한 번에 모든 코드를로드하지 않으려면 각 요소가 요청 될 때 포함하고 실행할 수있는 별도의 파일에 각 주요 논리를 넣으십시오.

이러한 모든 다른 포함을 포함하는 하나의 파일 포함 옵션을 유지하는 것조차도 더 깔끔하고 쉽게 구현할 수 있습니다.

당신은 당신의 코드 페이지 (당신이 그 이름을하지만) 것 :

add.two.php 
add.three.php 
logout.php 
default.php 

을 index.php를

<?php 
    if(isset($_POST['add_two_numbers'])) { 
      require('/directory/hierarchy/add.two.php'); 
      exit(); 
     } 
    elseif(isset($_POST['add_three_numbers'])) { 
      require('/directory/hierarchy/add.three.php'); 
      // code for adding three numbers 
      exit(); 
     } 
    elseif(isset($_POST['log_out'])) { 
      // destroy session and data before logging out 
      header("location: ./logout/logout.php"); 
      exit(); 
     } 
    else 
     require('/directory/hierarchy/default.php'); ?> 

<html> 
    <head> 
    <script> 
    function init() 
    { 
     // will do stuff if php did not exit properly 
    } 

    // more js code 

    window.onload = init; 
1

PHP에서의 자체 양식 게시는 "끈적한 형태"라고 불리며, 기억할 수 있다면 괜찮을 것입니다. 개인적으로 양식 필드 유효성 검사 및/또는 추가 정보 (상태, 오류 등)를 출력하기 위해 끈적한 양식을 사용했습니다. exit()을 방지하려면 웹 페이지 로직을 변경해야하지만 현재로서는 조언을하기가 어렵습니다. :)

관련 문제