The Pursuit of Happyness

PHP 모범 사례 1


http://www.hanbit.co.kr/book/look.html?isbn=978-89-6848-225-0


입력값의 위험을 제거하고 데이터의 유효성을 검사하고 출력을 예외 처리하라!


- 입력값 위험 제거

-- 입력 데이터가 애플리케이션 저장소 계층 (DB, CacheDB 등) 에 도달하기 전에 위험을 제거하는 것이 중요

-- HTML

htmlentities() 함수나 HTML purifier 라이브러리를 이용 

-- SQL

준비된 PDO 문을 사용하여 쿼리 인젝션 공격에 대비한다.

-- 사용자 정보

filter_var(), filter_input() 함수를 이용하여 필터링 한다.


- 유효성 검사

-- filter_var() 함수를 이용하여 유효성 검사를 통해 잠재적인 DB 오류를 방지한다.


- 출력 예외 처리

-- 애플리케이션 사용자에 의해 악의적인 코드가 표시되거나 부주의하게 실행되는 것을 막아준다.

htmlentities() 사용, ENT_QUOTES 를 이용해서 따옴표 처리, 적절한 문자 인코딩을 명시 (보통 UTF-8)


Comment +0

전에 이야기 한 데로 여기는 그냥 유용한 코드들에 대한 설명 형식으로 진행이 되므로,
순서가 뒤죽박죽이 될 것입니다.

오늘은 언어 인코딩에 대해서 이야기해 보겠습니다.

PHP를 사용하는 경우 APM 등을 이용하여 Apache, MySQL을 같이 사용하는 경우가 많습니다. 언제 부터인가 다국어 지원에 대한 이슈가 논의되면서 MySQL은 기본 설정이 utf-8 로 되고, 한국어를 쓰기 위해서 서버 설정을 euc-kr 등으로 변경을 해줘야 하는 번거로움이 있었습니다.

다국어를 다루는 것은 상당히 귀찮은 일입니다. ASC 부터 유니코드를 거쳐 utf-16 에 이르기까지 수많은 인코딩 방식이 있는데, 이것은 마치 메모리를 절약하기 위한 자리수 표시 방식이 밀레니엄 버그의 원인이 되었던 것처럼 효율적인 메모리 사용을 통한 지역별 언어 설정이 프로그래밍을 상당히 귀찮게 해주고 있습니다.

언어셋에 대한 부분은 나중에도 다룰 예정이므로, 오늘은 아주 간단한 form 전송시 사용이 가능한 간단한 utf-8 예제를 살펴 보도록 하겠습니다.

먼저 form 전송시에 utf-8 로 인코딩을 하기 위해서는 form 태그에서 아래와 같이 accept-charset을 utf-8 로 설정해 줍니다.

<form method=post action=target.php accept-charset='UTF-8'>


그리고 html 헤더에 다음의 코드를 삽입하게 되면, utf-8로 인코딩 된 페이지가 제대로 나타나게 됩니다.

<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>


사용에 대한 예제는 아래 페이지를 참고하시면 될 듯 하고요. 아래 페이지에서 이야기하는 서블릿상에서의 utf-8 인코딩이 바로 위의 메타태그를 사용하는 것입니다.

http://www.razorvine.net/test/utf8form/utf8pageform.html


설명을 하다보니 PHP 에 대한 내용이라기 보담은 html 에 대한 내용이 되어버렸네요..

대신 meta 태그를 위와 같이 설정하면 PHP 코드상에서의 한글 등의 문자가 깨져서 나오게 됩니다. 한글 출력시에는 iconv 를 이용해서 출력을 해주면 됩니다. 제가 쓰는 아주 간단한 인코딩 함수 입니다.

function getUTFString($str)
{
  return iconv("CP949", "UTF-8", $str);
}

이 정도의 설정만으로도 웹상에서의 다국어 지원 부분이 어느 정도 쉽게 해결이 될 것이라 생각됩니다. 나중에 AJAX 사용시에 넘겨주는 인자를 인코딩하는 방법과 결과값을 받을 때 사용하는 인코딩에 대해서 정리해 보도록 하겠습니다.

그럼~

Comment +0