본문 바로가기

OCIEnvNlsCreate() failed php 에서 오라클 연결시 오류 발생 (apache2.2.22 / php5.3.14) oci_connect() function.oci-connect: OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME and LD_LIBRARY_PATH are set and point to the right directories in /home/oops4u/www/db.php on line 3 ORACLE_HOME 이랑 LD_LIBRARY_PATH 가 설정이 안됐나; 오디에?? 언젠가 아무 설정 없이도 잘 됐던거 같은데 ㅜㅜ 음... 페이지 권한 때문인가? oracle:oinstall 로 바꿔보..
PHP Security 1. 외부/입력 데이터 처리 GET/POST/COOKIE/SESSION 변수, DB, php config 등으로 전달되는 데이터는 변조될 수 있으므로 정규식을 사용하여 입력 처리. function cleanInput($input){ $clean = strtolower($input); $clean = preg_replace("/[^a-z]/", "", $clean); $clean = substr($clean,0,12); return $clean; } $userId = cleanInput($_POST['userid']); 입력받은 $_POST['userid'] 변수의 형식이 영문(소문자), 12자 이내로만 이루어져야 한다면, 위와 같이, 입력 변수를 체크할 수 있도록 처리합니다. 특히 사용자 입력값에 길이 ..
http / https 세션 공유 보안서버 구축시에 필요시 프로토콜 전환 작업이 필요합니다. http https 로그인은 다음과 같은 처리 순서를 가집니다. http 로그인 폼에서 사용자로부터 입력을 받습니다. https 전달된 정보(id/pw)를 체크합니다. http return url로 이동합니다. 사용자 입력이 올바르다면 3번 과정에서 로그인 된 페이지가 출력되야 하는데, IE에서는 로그인으로 나오지만, chrome, firefox 등에서는 로그인이 되지 않은 페이지가 출력됩니다. 결론적으로, http 는 로그인 되지 않은 상태. https 는 로그인이 된 상태. 몇몇 브라우저에서 http https 간에 세션 공유를 못하는 것이 원인. 다음과 같이 해결 하였습니다. http 로그인 폼에서 사용자로부터 입력을 받고, https 로 ..
mysql 접속 시 UTF-8 상태에서 한글 깨짐 한 8시간 가량 삽질했더니, 목이 매우 뻐근하군... 삽질 주제는 어김없이 찾아온 인코딩 UTF-8. 물론 UTF-8의 기본적인 인코딩 설정은 정상적으로 마치고, php에서 DB와의 한글 입출력을 했는데, '???? 궭걐궹...' 이 즈랄.. 엄청난 시간을 투자해서 문제를 해결해 보려고 했지만, 방법이 구리다. - 일단 터미널에서 찍어본 mysql 인코딩 정보 mysql> show variables like 'c%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_clie..
print VS echo 공통점 문자열을 출력한다.실제 함수가 아닌 언어 구조이므로, 가변함수 방식으로 호출할 수 없고 괄호를 사용할 필요가 없다. 차이점 void echo ( string arg1 [, string argn...] )int print ( string arg )print를 함수처럼 호출하면 1을 반환한다.print는 대체로 echo보다 느리다. ex) // print는 함수이다. ($some_var) ? print('true') : print('false'); // echo는 함수가 아니므로, 다음 코드는 유효하지 않다. // Parse error: parse error, unexpected T_ECHO ($some_var) ? echo 'true' : echo 'false'; echo $some_var ? 't..
오류 메시지 출력(alert) 및 페이지 이동(refresh) 문제 브라우저의 Back, Forward 버튼을 누를 때 로그인, 글 작성등을 처리하는 중간 페이지에 걸려서 만료된 페이지라는 메시지가 출력되는 경우처리 결과에 따라 오류 페이지로 계속 되돌아 오는 경우를 경험해보셨을거라 생각됩니다. 예를들어, A(로그인 페이지) -> B(로그인 처리 페이지) -> C(정상처리 후 이동 URL), D(오류 처리 후 이동 URL) 방식으로 처리한다면 B는 둘 중 하나입니다. 정상이면 (메시지 출력 후) C로 이동 오류이면 (오류메시지 출력 후) D로 이동 방식정상이면 C로 이동 오류이면 D로 이동 (D = 오류메시지를 포함한 A와 동일/유사 페이지) 방식메시지를 출력하기 위해 JavaScript의 alert를 사용했다면 C나 D 페이지에서는 브로우저의 Back버튼을 누르면..
CSRF 공격 CSRF (Cross-Site Request Forgery: 크로스 사이트 리퀘스트 위조) 공격자가 다른 사용자로부터 HTTP 요청을 위조하는 종류의 공격을 통틀어서 CSRF라고 한다. 폼에 토큰을 추가시키면 CSRF 공격의 위험을 효과적으로 제거할 수 있다. HTML 폼에 토큰 삽입: ... 토큰 유효성 검사: 토큰 유효시간: 토큰은 사용자의 세션에 저장되기 때문에 공격자는 희생자에게 유일한 토큰을 사용해야만 한다. 이런 방법은 공격을 사용자 한 명에게만 유효하도록 제한시키며 공격자는 다른 사용자의 유효한 토큰을 얻어야만 한다. 다른 사람의 요청을 위조하는데 자신의 토큰을 사용할 수 없다.
파일 업로드 공격 위와 같이 숨겨진 폼 변수 MAX_FILE_SIZE 는 브라우저가 허용할 수 있는 파일의 최대 크기를 바이트 단위로 표시한 것이다. 이는 클라이언트에만 있는 제한이기 때문에 공격자는 쉽게 제한을 제거할 수 있다. 공격에 대응하기 위해 신뢰도를 높여주려면 PHP 지시문 post_max_size나 upload_max_filesize를 변경하여 파일 업로드 크기를 제한할 수 있도록 한다. phpinfo() 명령어로 지시문을 출력하여 확인할 수 있다. 서버 호스팅을 받아서 직접 수정할 수 없을 때에는 ini_set 함수를 이용하여 변경한다. ini_set( 'post_max_size', '8M' );POST 데이터가 허용하는 최대 사이즈를 8M로 설정한다. 이 설정은 파일 업로드에도 관여하고, 큰 파일을 업로드..