Loading...
홈 › 블로그

IT 개발 블로그 — REDINFO

PHP mysql_fetch_array() 함수 폐기 - mysqli_fetch_assoc()과 PDO fetch()로 완벽 마이그레이션

PHP 코드를 유지보수하던 중 경고 메시지를 본 적이 있나. 'Call to undefined function mysql_fetch_array()'라는 메시지가 나타나면서 코드가 작동하지 않는 상황을 말이다. 사실 이건 단순한 버그가 아니라 PHP 5.5.0부터 mysql 확장이 공식 폐기되고, PHP 7.0.0부터는 완전히 제거된 결과다. 다만 많은 개발···

0 0
PHP Warning: Division by zero - 0으로 나누기 오류 원인 분석과 완벽 해결

개발자들이 수식 계산을 다루다 보면 언젠가는 마주치는 에러가 있다. 바로 0으로 나누려고 할 때 발생하는 Warning 메시지다. 대수학에서 0으로 나누는 것은 수학적으로 정의되지 않지만, 프로그래밍에서는 어떻게 처리하느냐에 따라 결과가 완전히 달라진다. 이번에는 이 오류가 왜 발생하는지, 어떻게 사전에 방지할 수 있는지, 그리고 실무에서 자주 사용하는 안···

8 0
Stripe API 결제 처리 중 Webhook 시그니처 검증 실패 - PHP에서 안전한 결제 확인 완벽 가이드

Stripe API로 결제를 연동했는데 Webhook 요청이 자꾸 거부되거나, 서명 검증에 실패해서 결제 완료 후 주문이 등록되지 않는 경험을 해봤을까. 다만 대부분의 개발자들은 Webhook의 정체, 왜 서명 검증이 필요한지, 그리고 구체적으로 어떻게 구현해야 하는지 정확히 모르고 인터넷에서 가져온 코드를 무작정 복사해 붙인다. 이번에는 Stripe We···

12 0
PHP 웹 서비스 CSRF 공격 취약점 - 세션 기반 토큰 생성 및 검증 알고리즘 완벽 구현

사용자가 로그인한 상태에서 나도 모르게 비밀번호가 변경되거나 결제 요청이 승인되는 아찔한 보안 사고를 경험해봤을 것이다. 웹 서비스를 개발하다 보면 인증된 사용자의 권한을 악용하는 CSRF(Cross-Site Request Forgery) 공격을 쉽게 지나치는 경우가 많다. 다만 대부분의 개발자들은 CSRF 공격이 정확히 어떤 원리로 동작하는지 모르거나 단···

16 0
PHP htpasswd 파일 기반 HTTP Basic Auth 구현하기 - 간단한 인증부터 실전 보안까지

웹 서버에 접근할 때 사용자명과 비밀번호를 입력하는 팝업 창을 본 적 있을까. 그것이 HTTP Basic Authentication이다. 대부분의 개발자들은 이 방식이 웹 서버(Nginx, Apache) 설정에서만 가능하다고 생각해서, 애플리케이션 레벨에서 구현할 생각을 안 한다. 하지만 PHP 코드 내에서 직접 Basic Auth를 검증하고 제어할 수 있···

13 0
PHP unserialize() 보안 위험과 Object Injection 완벽 방어 가이드

PHP 개발자라면 serialize()와 unserialize()를 캐싱이나 세션 저장 용도로 한두 번쯤은 써봤을 것이다. 그런데 대부분의 개발자들은 unserialize()가 얼마나 위험한지 모른 채 외부에서 들어오는 데이터를 그냥 역직렬화하고 있다. 공격자가 조작한 직렬화 문자열을 unserialize()에 넘기면 예상치 못한 객체 생성과 메서드 실행으···

17 0
PHP cURL 연결 타임아웃과 SSL 인증서 에러 - 외부 API 통신 안정성 완벽 가이드

외부 API를 연동할 때 PHP cURL을 많이 쓰는데, 개발 환경에선 잘 되다가 운영 환경에서만 갑자기 타임아웃이 나거나 SSL 인증서 오류가 뜨는 경험을 해봤을까? 다만 대부분의 개발자들은 이런 오류가 왜 발생하는지, 정확히 어떤 설정으로 해결해야 하는지 모르고 일단 오류를 무시하는 코드를 짜 버린다. 이번에는 cURL의 타임아웃 메커니즘, SSL 인증···

21 0
PHP setcookie() 실패하는 이유 5가지 - headers already sent 부터 SameSite까지 완벽 해결

쿠키를 설정하는 건 간단해 보인다. setcookie() 함수 한 줄이면 끝이니까. 다만 대부분의 개발자들은 쿠키가 제대로 저장되지 않는 상황을 겪으면서 막연히 에러 메시지나 구글링에만 의존한다. 정작 쿠키가 왜 작동하지 않는지, 어떤 조건이 필요한지는 모른 채로.이번에는 PHP에서 setcookie()가 실패하는 가장 흔한 5가지 원인을 정확히 파악하고,···

22 0
PayPal IPN(Instant Payment Notification) 완벽 가이드 - 결제 검증부터 Webhook 처리까지

온라인 결제를 받는 개발자라면 한 번쯤 PayPal을 통해 결제를 처리한 경험이 있을 것이다. 다만 대부분의 개발자들은 결제 후 거래 확인 방법이 명확하지 않아서, 인터넷에서 가져온 코드를 그냥 복사해 붙인 채로 운영하고 있다. 심지어 IPN 핸들러가 제대로 작동하지 않을 때 원인을 파악하지 못해 결제 검증이 누락되거나, 중복 결제 처리 같은 실수를 범하곤···

25 0
PHP preg_match로 정규표현식 패턴 매칭하기 - 유효성 검증부터 실무 활용까지

웹 개발을 하다 보면 사용자 입력값을 검증해야 할 순간이 수도 없이 많다. 이메일 형식이 맞는지, 전화번호가 올바른지, 비밀번호가 정책을 만족하는지 확인해야 하는데, 대부분의 개발자들은 이런 작업을 할 때 라이브러리에 의존하거나 부정확한 if 문으로 때우곤 한다. 다만 정규표현식(regex)의 핵심인 preg_match 함수를 정확히 이해하고 있는 개발자는···

22 0
웹훅(Webhook) 위변조 요청 방지 - HMAC SHA256 서명 검증 완벽 가이드

외부 결제 PG사나 알림 서비스 등을 연동하면서 웹훅(Webhook) 수신 엔드포인트를 만들어본 경험이 있을 것이다.다만 대부분의 개발자들은 URL만 노출되어 있으면 누구나 위조된 HTTP 요청을 보낼 수 있다는 위험성을 간과한 채, 수신된 데이터를 그대로 DB에 반영하곤 한다.이번에는 웹훅 위변조 공격이 왜 위험한지, 이를 방지하기 위한 HMAC SHA2···

28 0
PHP Warning: Undefined Index 에러 - 배열 접근 안전성 완벽 가이드

PHP 개발을 하다 보면 거의 매일 마주치는 에러가 있다. 바로 "PHP Warning: Undefined Index" 경고다. 폼 데이터를 받거나 배열을 다룰 때 존재하지 않는 키에 접근하면 튀어나오는 이 경고는 대부분의 개발자들이 무시하거나 에러 리포팅 설정을 낮춰서 감춘다. 하지만 이 경고는 무시하면 안 되는 보안 취약점의 신호다. 이번에는 "Unde···

19 0
PHP intval()과 floatval()로 안전한 형 변환하기 - Type Juggling 위험성 완벽 해결

PHP 개발자들이 자주 겪는 문제 중 하나가 바로 형 변환이다. 사용자 입력값이나 API 응답값을 정수/실수로 변환할 때, 많은 개발자들이 단순히 괄호로 감싸거나(int) $value 형태로 변환한다. 다만 이런 방식이 정말 안전한지, 예상치 못한 값이 들어올 때 어떻게 처리되는지 정확히 아는 개발자는 드물다. 이번에는 intval()과 floatval()···

22 0
PHP에서 JSON 데이터를 안전하게 파싱하고 검증하기 - json_decode 완벽 가이드

API 응답을 받거나 외부 데이터를 처리할 때 JSON을 파싱하는 작업은 일상이다. 하지만 대부분의 개발자들은 json_decode를 쓸 때 기본 형태만 알고, 잘못된 JSON이나 보안 문제까지 제대로 대응하지 못한 채 진행한다. 특히 json_last_error()를 확인하지 않아서 조용히 실패하거나, 두 번째 인자를 모르는 경우가 많다. 이번에는 jso···

22 0
쿠키 vs 세션 vs 토큰 - 웹 인증 방식 완벽 비교

웹 개발을 하면서 사용자 로그인을 처리해야 할 때 쿠키, 세션, 토큰이라는 세 가지 방식을 마주치게 된다. 다만 이 세 가지가 정확히 뭐가 다른지, 어떤 상황에서 뭘 써야 하는지 설명할 수 있는 개발자는 생각보다 적다. 많은 사람들이 그냥 "세션을 쓰면 된다더라" 또는 "요즘은 토큰을 쓴다더라" 정도만 알고 있을 뿐이다. 다만 각 방식의 원리를 이해하면, ···

25 0
Linux chmod 권한 완전 이해하기 - 755? 644? 777? 정확히 뭔가요

리눅스 서버를 다루다 보면 chmod 명령어를 자주 사용하게 된다. 특히 파일 업로드 기능, 권한 설정, 디렉토리 접근 제한 등 웹 개발 과정에서 거의 매일 마주친다. 다만 대부분의 개발자들은 chmod 뒤에 붙는 숫자가 정확히 뭔지 모른 채 인터넷에서 가져온 코드를 그냥 복사해 붙인다. "755 권한으로 설정해" 라는 말은 들어봤지만, 왜 755인지, 6···

36 0
URL 을 통해 데이터 전송시 조금더 안전한 데이터 검증 방식을 이용해 보자.

요즘들어 회사에서 REST API 를 통한 다양한 연동 작업들이 많이 진행되고 있다. 물론 전문화된 API 서버가 있는건 아니고 POST 메서드로 JSON 데이터를 전송하는 수준의 연동 작업을 진행중이다. 솔직히 REST API 작업은 난이도로 보면 쉬운 작업에 속하긴 하는데 API 규격서를 제공해야하는 입장이라면 정말 귀찮은 작업이 될 수 있다. 또한 데···

616 14
PHP의 취약점에 대하여

PHP의 취약점을 검색하면 상당히 많은 검색결과를 볼 수 있다. 하지만 PHP 뿐만 아니라 모든 언어는 취약점이 발생하기 마련이다. 이런걸 보안하여 패치하는게 개발자의 일이기도 하다. 그럼 PHP의 취약점 보완을 위해 버전 업그레이드를 받는다고 해서 취약점이 해결될까? 절대 그럴일이 없다.. 이미 엉망인 소스에다가 PHP 버전을 업그레이드 받는다고 취약점이···

444 2
보안을 위해선 수시로 접속로그를 확인하는 습관이 필요하다.

개인 사이트 또는 블로그 운영시 접속로그를 살펴보는건 중요한 부분중 하나다. 사이트 접속 로그를 수시로 살펴보고 어떤 곳에 유입이 많이 되었는지 확인하여 컨텐츠를 구성하는데 도움이 될 수 있다. 하지만 언제나 그렇듯 접속로그를 보다보면 수상한 접속 기록등이 확인될 때가 있다. 보통 개인이 서버로 운영하지 않고 네이버 또는 티스토리와 같은 서비스에서 블로그를···

524 5
보안토큰을 적용하여 안전하게 FORM 전송을 하는 간단한 예제

최근들어 큰 프로젝트들이 많이 겹쳐 블로그 운영을 많이 못했던것같다. 현재 UI도 리뉴얼 구성중에 있긴하나 당분간은 엄두가 나지 않을듯 싶다. 이번에 소개할 내용은 보안토큰을 적용한 간단한 FORM 전송 예제이며 이 방법을 주로 사용하는 목적은 스팸(악성)글을 막기위한 용도로 많이 사용된다. 자세한 방법은 아래 예제 소스를 통해 알아보자. EX) 폼 파일 ···

1,941 11
REDINFO Since 2014
webmaster@redinfo.co.kr
Copyright © Redinfo All Rights Reserved