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으로 켜주면 일반 변수도 슈퍼 글로벌스 변수화 된다.
( 취약한 부분이기 때문에 최신버전으로 가면 이 설정이 없어졌을 수 있다 )
- 메세지 바디가 있다.
- 전달하려는 데이터의 크기의 제한이 없다.
- 전달하려는 데이터가 외부에 쉽게 노출되지 않는다.
- 반드시 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
}
?>
'프로그래밍 > WEB HACKING' 카테고리의 다른 글
[WEB HACKING] DB SQL( DDL / DML / DCL ) 개념 / MySQL 설정 및 DB Query (0) | 2017.08.29 |
---|---|
[WEB HACKING] php 간단한 로그인 창 만들기 / 쿠키 & 세션 이용방법 (0) | 2017.08.29 |
[WEB HACKING] javascript 이벤트 / php 개념 및 슈퍼 글로벌 변수 (0) | 2017.08.17 |
[WEB HACKING] javascript 반복문( while, for, for in ), 배열 / 간단한 야구게임 만들어보기 (0) | 2017.08.14 |
[WEB HACKING] html 태그(이미지, 표, 링크, 오디오, 비디오) / javascript 문법, 변수, 입/출력 (0) | 2017.08.12 |
댓글