TAG

#PHP

글 8개

Talk!Talk!
2026.01.28 13:58

자주사용하는 것들 - 시간선택기 UI(날짜/시/분)

/* timepick 컴포넌트 범위만 */ .timepick, .timepick *{ font-size:12px !important; line-height:1.4 !important; box-sizing:border-box; } /* 공통 row/item 구조 */ .timepick .row{ display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin-bottom:8px; } .timepick…

Talk!Talk!
2026.01.28 13:48

자주사용하는 것들 - 자동완성 선택기

<SELECT ..></SELECT>에서 출력되는 것이 많을때 <form id="myForm" method="post"> <div class="autocomplete_select" data-form-id="myForm"> <button type="button" class="autocomplete_select__btn" id="autocomplete_select_btn"> 선택하세요 </button> <div…

Talk!Talk!
2026.01.28 13:30

자주사용하는 것들 - 탭처리

메인 페이지: ctxKey 발급 + 세션에 element 저장 “ajax 호출 전에 변수들이 이미 선언”하고, 그 변수들을 element 슬롯에 포함 <?php session_start(); $pageToken = bin2hex(random_bytes(8)); $_SESSION['tab_ctx'][$pageToken] = [ 'e1' => $element1 ?? '', 'e2' => $element2 ?? '', 'e3' => $element3 ?? ''…

Talk!Talk!
2026.01.19 10:31

CSP(Content Security Policy) 적용기

웹취약 점검사이트에서 점수는 무시하고 넘어갔는데 천천히 보니 보안상에도 문제가 있을 것 같아 CSP설정을 nginx와 php내부에서 하게되었다. 웹 보안 점검(SecurityHeaders, CSP 검사 사이트 등)을 돌리다 보면 CSP(Content Security Policy) 항목에서 자주 감점을 맞는다. · CSP가 없다 · CSP가 unsafe-inline을 사용하고 있다 · CSP 헤더를 파싱할 수 없다 처음에는 “점수 문제 아닌가?” 싶었지만…

Talk!Talk!
2026.01.18 12:01

PHP에서 csrf_token(), csrf_check() 헬퍼를 만드는 이유(CSRF 토큰)

웹 폼을 만들다 보면 자연스럽게 이런 생각을 하게 됩니다. · “POST 요청인데 굳이 보안까지 신경 써야 하나?” · “로그인도 돼 있는데 위험할 게 있나?” 하지만 이 생각이 바로 CSRF(Cross-Site Request Forgery) 취약점이 생기는 지점입니다. 아래는 실무에서 자주 쓰는 가장 단순하면서도 효과적인 CSRF 방어 코드입니다. function csrf_token(){ if(empty($_SESSION['_csrf'])) {…

Talk!Talk!
2026.01.18 11:39

PHP에서 redirect() 헬퍼를 만드는 이유

PHP로 페이지를 구성하다 보면 “어떤 조건에서는 다른 페이지로 보내야 한다”는 상황이 자주 생깁니다. 보통은 아래처럼 간단히 처리하죠. header('Location: /somewhere', true, 302); exit; 그런데 실제 운영 환경에서는 이 방식이 종종 실패합니다. 대표적인 케이스가 이미 출력이 시작된 상태입니다. · include로 여러 파일을 조립하는 구조 · BOM(UTF-8 시그니처) / 공백 / 디버그 echo가 앞에서 한 번이라도…

Talk!Talk!
2026.01.18 11:30

PHP에서 안전한 출력 헬퍼 h()를 만드는 이유

PHP로 웹을 만들다 보면 거의 매 페이지마다 반복해서 하게 되는 작업이 있습니다. 바로 HTML 출력 시 이스케이프 처리입니다. htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); 문제는 이 코드가 길고 매번 옵션을 쓰기 귀찮고 실수하기 쉽다는 점입니다. 그래서 저는 아래처럼 출력 전용 헬퍼 함수를 하나 만들어 사용합니다. 전역 함수파일에 가장 우선적으로 만들어 두는 헬퍼 함수입니다. function h(mixed $s):…

Talk!Talk!
2024.12.09 21:01

익숙함과의 결별: 그누보드 SQL → PDO로 전환

그동안 별도의 기능이나 페이지를 제작할 때도 그누보드의 SQL 문법과 DB 함수가 너무 익숙해서 거의 습관처럼 사용해왔다. sql_query("SELECT * FROM g5_member WHERE mb_id = '$mb_id'"); 짧고, 빠르고, 손에 익은 문법. 개발 속도만 놓고 보면 이만한 게 없었다. 하지만 구조가 커지고, 외부 입력값이 많아질수록 보안적인 리스크(SQL Injection)에 대한 부담이 계속 남았다. 결국 안정적인 운영을 위해 PDO 기반으로 전환하기로 결정했다. PDO로 바꾸면서 불편해진 점 · 코드가 길어진다 · 매번 prepare → bind → execute 과정을 거쳐야 한다 · 단순 쿼리 하나도 작성량이 늘어난다 $stmt = $pdo->prepare("SELECT *…