보안

보안

    OAuth 2.0 클라이언트 만들기(feat. 깃허브)

    OAuth 2.0 OAuth 는 기본적으로 서비스 제공자(깃허브, 트위터, 페이스북)가 신뢰할 수 없는 타 어플리케이션에게 사용자의 아이디와 패스워드를 제공하지 않더라도 사용자의 특정 정보에 접근하거나 작업을 처리할 수 있도록 하는 방법이자 표준이다. 최근 일반적으로 웹사이트에 흔히 볼 수 있는 SNS 계정으로 로그인하는 것이 가장 대표적인 사용처라고 볼 수 있다. 내가 만든 서비스에 수동으로 회원가입 기능을 넣지 않더라도 서비스 제공자가 가지고 있는 개인정보를 기반으로 로그인할 수 있도록 하는 것이며 이를 사용하면 작은 서비스에서 직접 비밀번호를 관리해야 하거나 하는 번거로운 부분을 떠안고 가지 않고 부담을 대기업에게 떠넘기게 된다. JWT(Json Web Token)와는 다르게 토큰 자체는 큰 의미를..

    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 에..