blog.stackframe.dev

Web/PHP (7)

[PHP 8.2] 동적 속성 기능 제거 예정

PHP 8.2가 2022년 12월 8일에 출시되었다. 최근까지 개인적으로 정신없는 나날을 보냈고 이런 저런 이유로 업데이트를 미루다 오늘 서버 시스템을 업데이트했다.

현재 Unix time 밀리초 단위로 가져오기

로그를 남길 때 시각을 Unix time(epoch)로 남기면 기준 시간대가 달라져도 쉽게 변환이 가능하므로 편리하다. 다만 접속이 많은 서버라면 같은 시각에 여러 로그가 기록될 가능성이 높고, 데이터베이스에서 정렬을 하더라도 실제로 기록된 순서대로 정렬되지 않는 문제가 있다.

[PHP 8.1] array_is_list() 함수 추가

PHP 8.1에는 다른 흥미로운 기능들도 많지만 그 중에 소소하게 귀찮음을 덜어줄 array_is_list() 함수가 생겼다. 이 함수는 배열이 리스트 형태로 되어있는지 검사한다. 예전에는 동일한 기능을 하는 함수를 직접 구현해야 했지만 이제 PHP 언어 자체에서 이 기능을 지원한다.

mime_content_type() 함수로 파일 MIME 타입 알아내기

파일 업로드를 구현할 때 특정 타입의 파일만 업로드 가능하도록 제한하고 싶은 경우가 있다. 이걸 구현하기 위해 파일 이름에서 확장자를 분리하거나 브라우저로부터 파일을 업로드 할 때 전달되는 MIME 타입을 사용하는 경우가 많다. 하지만 이 방법들은 사용자의 입력을 순순히 받아들인다는 점에서 악용 될 가능성이 존재한다.

[PHP] 이미지 메타데이터 제거하기

카메라로 사진을 찍으면 EXIF 포맷으로 찍은 시간, 기기 모델명, 위치, 조리개 값 등 여러 정보가 사진 안에 포함된다. 그래서 개인정보 보호를 위해 이러한 정보를 모두 제거하는 기능이 필요한 경우가 생긴다.

hash_equals() 타이밍 공격에 안전한 해쉬 비교 함수

PHP 내장 함수들을 둘러보다 hash_equals()라는 재미있는 함수를 발견했다. 설명을 보니 타이밍 공격을 방지하기 위해 만들어진 함수인 것 같다.

[PHP] GET, POST로 배열 전달

PHP에서는 GET이나 POST 인자에 문자열이 아닌 배열이 들어올 수 있다. 매개변수 뒷부분에 []를 사용하면 해당 인자는 배열로 만들어지게 된다. 간단하게 아래의 예시를 보자:

1