본문 바로가기

PHP

(3)
[PHP] PDO로 쿼리하기 이전의 PDO로 데이터베이스 접속하기에 이어 이번에는 PDO를 사용하여 쿼리를 보내어 보겠습니다. 쿼리하는 방법으로는 크게 2가지 방법이 있는데, 첫 번째는 단순하게 완성된 SQL문을 보내서 결과를 받는 것과 Prepared statement로 코드 단에서 SQL문의 뼈대만 먼저 보내고 이후에 조건에 들어가는 인자들을 넘기는 것으로 SQL을 실행하는 방법이 있습니다. 여기서는 이 2가지 방법을 모두 설명할 예정입니다. PHP에서 PDO로 DBMS에 접속하는 방법에 대해서는 이전 글을 참조하시기 바랍니다. 예제를 보는게 가장 이해하기 쉬우니 간단한 테이블을 하나 만들고 입력, 조회하는 PHP 코드를 만들어 보겠습니다.
[PHP] PDO로 데이터베이스 접속하기 PHP 5.1 부터 PDO라는 객체가 제공되었습니다. 이 객체를 통해 다양한 데이터베이스에 동일한 인터페이스로 접근이 가능합니다. 예전처럼 데이터베이스마다 따로 제공되던 함수(mysqli_* 등)와 연결 해제, 결과 데이터 할당 해제를 신경쓰지 않고도 편하게 그리고 SQL injection 걱정 없이 프로그래밍이 가능합니다. 먼저 PHP에서 사용하는 데이터베이스의 PDO 드라이버 확장 모듈을 사용하도록 설정해야 합니다. php.ini에서 자신이 사용할 데이터베이스의 pdo 확장 모듈을 주석해제하거나 입력합니다. 저는 PostgreSQL을 사용하므로 extension=pdo_pgsql를 주석해제 했습니다. 중요한 점은 사용하는 시스템의 패키지 매니저와 레포지토리에 따라 확장 모듈이 다른 패키지로 분리되어 ..
htmlspecialchars로 XSS 공격 방어하기 XSS 공격은 어떤 면에서는 간단히 막을 수 있을 것처럼 보이지만 다르게 보면 상당히 골치아픈 공격 중 하나입니다. XSS 공격을 막는 것은 아주 간단합니다. 사용자의 입력값에서 html 관련 문자 ( " ' &)들을 모두 html entity( " ' &)로 변환시키는 겁니다. 이렇게되면 사용자의 어떠한 입력값도 HTML 요소로 브라우저가 해석하지 않으니 당연히 XSS가 불가능합니다. PHP에서는 이를 간편하게 할 수 있는 htmlspecialchars라는 함수가 존재합니다. php 메뉴얼 인자로 총 1~4개를 받습니다. htmlspecialchars(변환할 문자열[, 옵션[, 인코딩[, 더블 인코드]]]) 첫 번째 인자로 변환시킬 문자열을 입력합니다.두 번째 인자로는 옵션을 입력하..