보안

    PHP: 파일 업로드와 다운로드

    파일 업로드 파일을 업로드하는 방법은 아주 간단하다. 따로 모듈을 사용할 필요 없이 자체 내장 함수만으로도 업로드를 처리할 수 있다. 물론, 이부분도 보안을 처리해주어야 할 것들이 있다. 할 일이 그렇게 많지는 않으므로 같이 언급하고자 한다. 폼 아래의 폼은 파일을 업로드 위해 작성한 폼이다 속성 부분에 있는 entype="multipart/form-data" 부분이 있어야 하므로 폼을 작성할 때는 이점을 꼭 확인해야한다. POST 요청을 하는 것도 잊지 말자. $_FILES 이 배열은 슈퍼 글로벌 변수로써 프론트에서 요청한 파일 정보가 담겨있으며, 키값은 폼에서 보이는 것처럼 uploads 이다. 이것은 2차원 배열이기 때문에 해당 값안에는 또 다시 배열이 담겨있으며 파일의 이름과 같은 정보가 담겨있다..

    PHP: 데이터베이스 (MySQLi, PDO)

    데이터베이스 데이터베이스를 사용하는 일은 웹 어플리케이션을 작성한다면 대부분 있는 일이기에 이 부분을 빼놓을 수는 없다. PHP도 물론 오라클이나 MS-SQL 같은 다양한 데이터베이스에 연결할 수 있으나, 가장 많이 사용하는 것이 아무래도 MySQL 이기에 이부분을 중점으로 이야기하고자 한다. 또한 데이터베이스 관련 함수는 실무에서도 조차 올바르지 못한 방법으로 사용되어 해킹에 노출되고 있기 때문에 바르게 익혀둘 필요가 있다. MySQLi 레거시 프로젝트에는 mysql_ 로 시작하는 비교적 오래된 함수가 사용된 것을 볼 수 있는데, 이는 문제가 있어 mysqli_ 로 대체할 것을 권장하고 있다. mysqli 조차도 요즘에 쓸만한 함수도 아니고, API 수준에서 바라보자면 상당히 로우한 수준이기에 그다지 ..

    PHP: 쿠키와 세션

    쿠키 쿠키는 브라우저에 저장되는 정보로 Key-Value 쌍으로 구성되어 있고, 유효기간을 가지고 있다. 브라우저에 저장할 수 있는 스토리지는 쿠키 말고도 로컬 스토리지와 세션 스토리지가 있는데, 쿠키 이외에는 서버에서 직접적으로 접근할 수는 없다. PHP 에서는 $_COOKIE 글로벌 변수를 통해 접근할 수 있기 때문에 별도의 설정없이도 접근할 수 있다. 참고로 쿠키에 중요한 정보를 저장해서는 안 된다. 정말로 중요하다면 세션과 같은 서버 저장소에 저장해야 한다. setcookie(string key, [ string $value = "" [, int $expires = 0 [ ... ]]]): bool 쿠키를 지정하여 Set-Cookie 헤더에 넣을 때는 setcookie 함수를 쓴다. 제목에는 일부..

    PHP: HTML 폼 (GET, POST)

    HTML 폼 HTML 폼은 HTTP 요청의 역사에서 오래된 것 중 하나이다. HTTP 요청은 cURL, Ajax 등 다양한 기술로 처리를 할 수 있으나 폼요청은 웹사이트에서 가장 많이 사용하는 요청이자 역사가 오래된 요청 방법이다. 여기서 HTML 폼은 우리가 흔히 볼 수 있는 회원가입, 로그인 화면에서 아이디와 패스워드를 입력하고 확인 버튼을 눌러 로그인을 할 수 있도록 해준다. 우리말로는 양식이라고 하는 듯하지만, 편의상 폼이라고 할 것이다. 로그인 HTML 폼의 예시로는 로그인이 제격이다. 로그인의 과정 자체는 언급하지 않겠지만, 폼은 데이터를 전달하기 위한 용도로 사용하므로 해당 데이터를 어떻게 사용할 지는 프로그래머의 몫이다. 따라서 여기서는 해당 포스팅에서는 폼으로 데이터를 전달하고 PHP 에..

    PHP: 에러와 예외 (try, catch, finally)

    에러 여기서 에러라는 것은 문법 에러와 치명적 에러 등을 말합니다. 에러는 보통 문법 에러, 컴파일 에러 등 컴파일 타임에 나타나는 것이 일반적이며 예외는 데이터베이스 연결 예외 등 런타임에 나타나는 것이 일반적입니다. PHP 언어에서는 에러를 처리할 수 있는 몇 가지 기법이 있는데, 알아보도록 하겠습니다. error_reporting(int) 에러 발생 레벨을 조정할 수 있습니다. 상수 E_ 로 시작하는 것이 일반적입니다. 예를 들면 다음과 같이 레벨을 조정할 수 있습니다. 예제에 나온 설정이 일반적으로 사용되고, 프로덕션에서는 꺼놓는 경우도 있습니다. 사실 보안을 위해서라면 꺼놓는게 좋기는 합니다. int $level 에러 보고 레벨 error_reporting(E_ALL & ~E_NOTICE); e..