카테고리 보관물: PHP

modsecurity unicode sql injection

웹사이트를 만들고, 한글을 post로 넘길 때, 유니코드로 넘어가게됩니다.

이 과정에서 modsecurity가 설치 되어 있는 경우 유니코드를 sql injection으로 탐지하는 경우가 있는데요.

아래와 같이 탐지 룰을 조정하면 해결 가능합니다.

기존

"(^[\"'`´’‘;]+|[\"'`´’‘;]+$)"

변경

"(^(?:(?&QC)|;)+|(?:(?&QC)|;)+$)(?(DEFINE)(?'QC'(?:[\"'`]|\xC2?\xB4|\xE2\x80(?:\x99|\0x98))))"

 

출처 : https://github.com/SpiderLabs/owasp-modsecurity-crs/issues/21

PHP에서 POWERSHELL SCRIPT 실행하기

환경 :  WINDOWS 2012 R2 + PHP + IIS

윈도우에서 사용하는 POWERSHELL(PS1) 스크립트를 PHP가 실행하여 해당 결과를 리턴받아 사용자에게 표시하는 기능이 필요했습니다.

일반적으로 리눅스에서는 exec(), shell_exec(), system()과 같은 함수를 사용하셔 bash script를 손쉽게 호출했고, 결과 값을 받아서 사용했었는데요.

윈도우에 해당 사항을 적용해보니 제대로 결과 값을 리턴하지 못하는 현상을 확인했습니다.

해당 스크립트 뒤에 2>&1 만 추가하면 파워쉘 실행후 파워쉘에서 결과를 리턴받아 웹에 출력이 가능합니다.

$output = shell_exec(‘powershell “get-user “testing” 2>&1“‘);

$fp = shell_exec(“$command 2>&1“);

 

출처 : http://stackoverflow.com/questions/2360228/php-to-powershell-using-shell-exec

 

 

PHP에서 간단하게 (6자리)랜덤 숫자 생성하기

PHP를 이용해 간단하게 6자리 랜덤키를 아래와 같이 생성할 수 있습니다.

rand(000000,999999);

위와 같이 할 경우 앞자리가 숫자 0인 경우 제대로 처리를 하지 못해 중간에 5자리로 표시되는 경우도 있는데요. 이럴 경우를 대비해서 숫자 0도 출력할 수 있도록 sprintf 문도 같이 사용합니다.

$rand_num = sprintf(‘%06d’,rand(000000,999999));

위와 같이 사용하면 6자리 랜덤한 숫자키를 생성할 수 있습니다.

PHPExcel 에서 줄바꿈 처리

PHPExcel 을 이용해 EXCEL 파일 생성시 줄바꿈 처리 방법.

  1. setWrapText 허용  

$objPHPExcel->getActiveSheet()->getStyle(“D1”)->getAlignment()->setWrapText(true);

 

2. 줄바꿈 문자 처리

   $lfcr = chr(10);
$group_for_excel = str_replace(‘|’,$lfcr,substr($search_info_array[8], 1));

 

중요한 건 setWrapText 허용 부분과 php에서 줄 바꿈 처리하여 EXCEL파일 생성시 줄바꿈 문자는 chr(10)을 사용한다는 것.

 

PEAR Package offline install

PEAR Package를 설치할때 인터넷이 연결되지 않거나, 보안정책상 인터넷에 접속할 수 없는 경우 설치하기가 난감할 때가 있습니다.

이럴때는 패키지만 먼저 다운로드 받고 그 패키지로 아래와 같이 OFFLINE설치 할 수 있습니다.

[root@localhost ~]# pear install DB-1.8.2.tgz
Package “pear.php.net/DB” dependency “pear.php.net/PEAR” has no releases
install ok: channel://pear.php.net/DB-1.8.2

출처 : http://pear.php.net/manual/en/guide.users.commandline.installing.php

이빨빠진 array 재정렬 하기

PHP에서 ARRAY배열을 사용하다보면 잦은 unset 으로 중간에 array 이빨이 빠진 경우가 종종 있습니다.

이럴 경우 아래와 같이 설정하여 이빨빠진 배열을 재정리해줌으로써 불필요한 공간을 정리할 수 있습니다.

$var_array = array_values(array_filter($var_array));

아니면

$var_array = array_slice(array_filter($var_array),0);

PHP에서 함수에 배열 넘기기

목적 : PHP에서 함수 매개변수에 배열넘기기

배열을 그냥 만들어서 함수의 매개변수로 넘기지 제대로 값이 넘어가지 않는 현상 확인.

해결방법 : 배열을 함수에 넘기기전, serialize후 넘기고, 함수에서는 받은 값을 unserialize 후 사용

http://kr.php.net/manual/en/function.serialize.php

PHP Notice 로그 제거

PHP에서 NOTICE 에러가 표시되는 부분을 제거하려면 아래와 같이 하시면 됩니다.

 

–  php.ini 파일에 아래 항목 수정
error_reporting = E_ALL & ~E_NOTICE

NGINX + PHP spawn-fcgi 실행시 문제 255

nginx 설치후 spawn-fcgi 실행시 아래와 같은 오류가 발생하였습니다.

/etc/init.d/php_cgi start
spawn-fcgi: child exited with: 255

원인은 php-fpm 이 문제입니다.

현재 제가 쓰고있는건 php 5.2버전인데 php 5.2버전에서는 fpm을 사용하려면 php 코어를 컴파일 해야한다고합니다. php 5.3.6 버전에서는 해당 fpm이 통합되어 별도의 컴파일 없이 바로 사용이 가능합니다.

최소 php 5.3.6 이상 버전으로 업데이트하고 php_cgi를 실행해보니 정상적으로 동작하고 있습니다.

GET 특수문자 넘기기

페이지간 데이터를 주고 받을때 주고받을 데이터내에 특수문자가 존재하는 경우, POST는 문제가 없으나 GET의 경우 제대로 인식하지 않는 경우가 있습니다.

POST로 데이터 주고받는 방식을 바꾸면 바로 해결이 되나 불가피하게 GET으로 사용해야할 경우, 아래와 같이 해당 특수 문자를 변경해주면 사용이 가능합니다.

& %26
+ %2B
/ %2F
= %3D

PHP5에서 domxml 사용시 오류


Fatal error
: Call to undefined function domxml_open_mem()

php5에서 domxml 사용시 일부 함수 적용이 정상적으로 안되는 경우가 있습니다.

php4에서 사용하던 일부 함수가 php5로 올라가면서 제거된 경우 이며, 이경우 아래의 사이트에서 관련된 라이브러리파일을 받아서 include 하여 처리할 수 있습니다.

“저같은 경우 domxml_open_mem()함수가 필요했었고, php5를 사용중이었습니다.
phpinfo()로 봤을때 domxml관련된 정보가 전부 enable되어 있었으나 정상적으로 동작하지 않아 검색한 결과 php5에서 제거된 함수였습니다”

http://alexandre.alapetite.fr/doc-alex/domxml-php4-php5/index.en.html