본문 바로가기
프로그래밍/WEB HACKING

[WEB HACKING] php 연관 배열, foreach / 데이터를 서버로 전달하는 방법( GET / POST / 쿠키 ) / 웹 인증 방법

by B T Y 2017. 8. 17.
반응형

php 연관 배열, foreach / 데이터를 서버로 전달하는 방법( GET / POST / 쿠키 ) / 웹 인증 방법에 대해서 정리한다.



PHP
 
  - 일반 변수, 슈퍼 글로벌스 변수
 

  - print_r() 함수를 이용해서 배열 안에 있는 전체 원소를 볼 수 있다.
 


1. 연관 배열
  - 파이썬의 dict 타입과 유사한 형태
 


( 파이선의 dict처럼 key를 이용해서 해당 value 값을 가져올 수 있다 )


2. 멀티 배열
  - 배열 안에 배열을 넣는 형태
 


( 멀티배열은 다중배열과 같고 배열안에 배열을 넣어서 다차원으로 배열을 사용할 수 있는 방법이다 )


 
foreach문
 

  foreach ( $arr as $value ) {
    실행할 코드;
  }





( foreach문을 위와 같은 형식으로 사용하게 되면 배열의 value를 가져오게 된다 )


  - 파이썬의 for문과 동작 방식이 같다. 



( key와 value를 모두 가져오고 싶다면 연관배열을 선언할때처럼 '=>' 기호를 이용해서 표현해주면 

해당 배열에서 key와 value를 모두 가져올 수 있다 )




  - foreach문을 이용하면 key와 value를 둘다 가져올 수 있다.
 



 
WEB 2.0의 핵심
 
  - 입력값 전달
 
 
데이터를 서버로 전달할 수 있는 방법
 
1. HTTP에서 조회할 수 있는 메서드
 
1). GET
  - 메세지 바디가 없다.
 
  - 메세지 헤더를 통해서만 전달이 가능
  - 리퀘스트 라인의 URI 필드를 통해서 전달
 
  - 전달하려는 데이터의 크기가 한정적이다.
  - 헤더의 크기를 넘어갈 수는 없다.
 
  - 전달하려는 데이터가 외부에 노출(보안상 취약)
 


( wireshark를 이용해서 GET방식의 http 패킷을 캡쳐 해보면 위와 같이 '?' 기호를 구분자로 시작해서 

'변수=값&변수=값&...' 형태로 데이터를 전달하는게 보이므로 GET 방식은 전달되는 데이터가 노출 되는걸 볼 수 있다 )


  - URI/info.php?변수=값&변수=값&변수=값...
 


  * $_REQUEST와 $_GET 변수에는 전달된 GET방식으로 전달된 변수와 값이 들어있다.
    ( key와 value로 되있어서 해당 변수의 값을 가져오려면 key 호출하면 된다 )
 
  * GET 방식의 입력 값 변조를 위해서는 URL창을 이용한다.
 


( php 설정파일 변경을 통해서 일반 변수를 선언하지 않았는데도 슈퍼글로벌스 변수처럼 사용이 되는걸 볼 수 있다 )


- php 설정 파일에서 693 register_globals = Off 설정을 On으로 켜주면 일반 변수도 슈퍼 글로벌스 변수화 된다. 

   ( 취약한 부분이기 때문에 최신버전으로 가면 이 설정이 없어졌을 수 있다 ) 


 




2). POST
  - 메세지 바디가 있다.
 
  - 전달하려는 데이터의 크기의 제한이 없다.
  - 전달하려는 데이터가 외부에 쉽게 노출되지 않는다.
 
  - 반드시 form 태그가 있어야만 한다.
  - form은 웹 브라우저에서 사용자로부터 입력을 받기 위한 필드
 
  * form에서 method를 이용해서 전송방식을 따로 지정하지 않으면 default로는 GET방식을 이용하게 된다.
    ( form 안에 action 속성을 이용하면 전송할 위치를 지정해줄 수있다 )
 
  * form을 이용하면 GET, POST 방식 모두 전송이 가능하다.
 
  * 공격을 할때 소스보기를 통한 분석은 기본이고 가장 중요하다!!!
 




 


2. 쿠키를 이용한 전달
 
  - 사용자 인증시에 사용
 


 



 
웹 인증
 
  - HTTP도 TCP통신을 한다.
  - 웹은 세션을 임의로 해제한다.
 
! TCP 통신을 하는 어플리케이션의 인증은 TCP 세션이 종료되기 전까지는 유효하다.
 
 
1. 쿠키를 이용한 인증
 
  * 쿠키는 document 객체에서 관리한다. ( document.cookie )
  * 쿠키를 변조하면 로그인 없이도 쿠키를 이용해서 해당 사용자로 로그인이 가능하다.
 
 
2. 세션을 이용한 인증
 
 




 

login.php
 
<?php
  if( isset( $_REQUEST[id] ) && isset( $_REQUEST[pw] ) ) {
    // input exist
  } else {
?>
 
 
<!doctype html>
 
<html>
 
<head></head>
 
<body>
        <form method=POST action=login.php>
                id <input type=text name=id> <br>
                pw <input type=password name=pw> <br>
                <input type=submit value=login>
        </form>
</body>
 
</html>
<?php
  }
?>



 
 
 

반응형

댓글