728x90
300x250
[PHP] PHP 5.6 - xFrame 공격 방지하기(Clickjacking 피하기)

 

이번에 소개할 것은 xFrame 기반의 공격을 방지하는 방법에 대해서 소개하겠다.

 

대상 프로그램: PHP 5.6

 


1. 클릭 재킹(Clickjacking)

 

클릭 재킹 (사용자 인터페이스 교정 공격, UI 교정 공격, UI 교정)은 웹 사용자를 클릭하여 사용자가 클릭 한 것으로 보이는 것과 다른 것을 클릭하여
기밀 정보를 공개하거나 자신의 컴퓨터를 제어하는 악의적인 기법이다.


겉보기에 무해한 웹 페이지를 클릭해라. 이것은 다양한 브라우저와 플랫폼에 걸친 취약점인 브라우저 보안 문제이다.

클릭 잭은 다른 기능을 수행하는 것으로 보이는 버튼을 클릭하는 것과 같이 사용자의 지식없이 실행할 수 있는 임베디드 코드 또는 스크립트 형태를
취한다.
"클릭 재킹"이라는 용어는 2008년에 Jeremiah Grossman과 Robert Hansen이 만들었다.
클릭 재킹(Clickjacking)은 컴퓨터가 그 권한을 오용하는 것에 순진하게 속아 넘어갈 때를 기술하는 용어인 혼란스러운 대리 문제의 한 예이다.


[설명]
HTML 웹 페이지의 겉보기에 무해한 기능을 사용하여 예기치 않은 작업을 수행 할 수 있으므로 클릭 재킹이 가능하다.

클릭 재킹 페이지는 숨겨진 링크를 클릭하여 원치 않는 작업을 수행하도록 사용자를 속인다.
클릭 재킹 된 페이지에서 공격자는 투명 레이어에서 다른 페이지를 로드한다.
사용자는 보이지 않는 페이지에서 실제로 작업을 수행하는 동안 보이는 버튼을 클릭한다고 생각한다.
숨겨진 페이지는 인증 된 페이지 일 수 있다. 따라서 공격자는 사용자가 의도하지 않은 작업을 수행하도록 속일 수 있다.
사용자가 숨겨진 페이지에서 진실로 인증되었으므로 나중에 공격자를 추적 할 방법이 없다.

 

결과적으로 웹 브라우저가 가지고 있는 취약점을 막는 것이다.

 


2. php코드에 클릭 재킹 피하기 코드 삽입하기

 

<      ? php

header("Content-Type: text/html; charset=UTF-8");
header('X-Frame-Options: DENY');  // 'X-Frame-Options'
// header('X-Frame-Options: ALLOW-FROM https://youtube.com/');

?    >

 

이런 형태로 삽입할 수 있다.

 


3. 참고자료(Reference)

 

1. Clickjacking, Last Modified 07-27-2018, 08:17 (UTC)., Accessed by 2018-07-31, https://en.wikipedia.org/wiki/Clickjacking, Wikipedia.

2. X-Frame-Options SAMEORIGIN blocking iframe on my domain, Last Modified, Accessed by 2018-07-31, https://stackoverflow.com/questions/12182768/x-frame-options-sameorigin-blocking-iframe-on-my-domain, Stack Overflow

3. header, Last Modified, Accessed by 2018-07-31, http://php.net/manual/en/function.header-remove.php, PHP.net

4. X-Frame-Options, Last Modified, Accessed by 2018-07-31, https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options, MDN(Developer Mozila)

반응형
728x90
300x250

[PHP] PHP 5.6 - 시큐어 코딩하기(SQL Injection)

 

실제 작성한 코드를 통해서 소개한다.

외부의 사용자가 스크립트 언어를 삽입하여 SQL 문장으로 공격하는 문제 등이 존재할 수 있다.

 

이를 막는 방법에 대해서 소개한다.

 

대상: PHP Version 5.6.36

         (선택) mysqlnd 5.0.11-dev - 20120503 

 


1. SQL 문장 변형이 일어나기 쉬운 코드

 

          /*
          $query = 'SELECT password FROM board_' . $boardName . '_comment ' .
                    'where id = \'' . $comment->getID() . '\' ' .
                    'and password = \'' . $password . '\'';
         */ // SQL Injection 미점검  

 

그림 1-1. 문자열로 생성하는 SQL 문장

 

이런 코드로 프로그래밍을 작성하면 다음과 같은 일들이 생길 수 있다.

 

 SELECT password FROM board_{임의의 질의값}_comment where id = {랜덤아이디, 스크립트} and password = {랜덤비밀번호 대칭};

 

그림 1-2. SQL 문장으로 공격하기

 

예를 들어서 화면을 아래처럼 꾸몄다고 가정하자.

 

번호

{id}

 

글 제목

{subject}

 

조회수

{count}

 

 

 

 

 

 

 

 

그림 1-3. UI - View.php

 

예를 들면, 그림 1-3에서 {id}의 내용에 불법적인 스크립트 등을 삽입하여 공격할 수가 있다.

이러한 것을 예방하려면, 아래의 코드처럼 개선하면 좋을 것으로 보인다.

 


  public function isPasswordComment($boardName, $comment){
  
          $link = mysql_connect($this->conn->getHost(),
                                          $this->conn->getUser(),
                                          $this->conn->getPw()) or
                                          die('Could not connect' . mysql_error());
                       
          mysql_set_charset('utf8', $link);
  
          mysql_select_db($this->conn->getDBName()) or die('Could not select database');

          mysql_query("set session character_set_connection=utf8;");
          mysql_query("set session character_set_results=utf8;");
          mysql_query("set session character_set_client=utf8;");
   
          $password = $this->crypt->decrypt( $comment->getPassword() );

         

          /*
          $query = 'SELECT password FROM board_' . $boardName . '_comment ' .
                    'where id = \'' . $comment->getID() . '\' ' .
                    'and password = \'' . $password . '\'';
         */ // SQL Injection 미점검  
  
          $query = sprintf("SELECT password FROM board_%s_comment WHERE `id` = '%s' AND " .
                     "`password` = '%s'",
                    mysql_real_escape_string($boardName),
                    mysql_real_escape_string($comment->getID()),
                    mysql_real_escape_string($password));       // SQL Injection 점검

  
           $result = mysql_query($query, $link) or die('Query failed: ' . mysql_error());

 

           // DB Article
           $password = "";
           while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
                  $password = $row['password'];
           }
  
           // Free resultset
           mysql_free_result($result);
  
           // Closing connection
           mysql_close($link);
  
           if ( empty($password) )
               return false;
           else
               return $password;
  
 } 

 그림 1-4. 개선된 코드(SQL Injection)

 


2. 참고자료(Reference)

 

1. SQL Injection, PHP.NET, http://php.net/manual/en/security.database.sql-injection.php, Accessed by 2018-07-31

반응형
728x90
300x250
[PHP/GPLv3] Feng Office 2.32Rc1 한글화 - 그룹웨어 오픈소스

 

한글화를 다시 수작업으로 재진행하였습니다.

이전 한글화 파일이 최신 2.32Rc 형태가 아니어서 새로 2.32 형태로 작업하였습니다.

 


1. Feng Office 2.32Rc 1 (Community Edition)

 

[도도(dodo) / 한글화 작업 수행] 2.32 RC1

fengoffice.vol1.egg

fengoffice.vol2.egg

 

License(라이센스): GNU/GPL 3 license.

 

공식 프로젝트 사이트: http://fengoffice.com/

소스포지 사이트: https://sourceforge.net/projects/opengoo/

반응형
728x90
300x250

[Linux] Centos 5.3(32bit), Ubuntu 9.04(64bit) - Apache 2.x + PHP 5.3 + MySQL, 라이브러리 설치하기

태스트 환경1 :

운영체제 : Centos 5.3(32bit)
CPU : AMD Athlon 64 x2 3600
RAM : 2GB

태스트 환경2 :
운영체제 : Ubuntu 9.04(64bit)
CPU : Atom 230 x2
RAM : 1GB


필수 사용 라이브러리 :


Libmcrypt(암호화 라이브러리)


다운로드를 받을만한 위치로 이동합니다.


다운로드 받기 :
http://www.mysql.com (MYSQL 홈페이지)
ftp://ftp.neowiz.com/pub/apache/httpd/httpd-2.2.11.tar.gz
ftp://ftp.neowiz.com/pub/languages/php/

미러링 서버 제공 : 네오위즈

다운로드 받기


wget 주소 (MySQL 5.x 버전) 다운로드
tar xvfz mysql-5.1.version.tar.gz                  (압축 풀기)

wget ftp://ftp.neowiz.com/pub/apache/httpd/httpd-2.2.11.tar.gz      (Apache 2.2.11) 다운로드
tar xvzf httpd-2.2.11.tar.gz                       (압축 풀기)

wget ftp://ftp.neowiz.com/pub/languages/php/     (Php-5.2.10) 다운로드
tar xvzf php-5.2.10.tar.gz                        (압축 풀기)



 


 


 


 


 


 


 
(기타 라이브러리 재 연동)
/usr/local/php/bin/pear upgrade-all
/usr/local/php/bin/pear install DB File Mail Mail_Mime
/usr/local/php/bin/pear install MDB2 MDB2_Driver_mysql MDB2_Driver_mysqli
/usr/local/php/bin/pear install HTTP_Request XML_RPC


최종 수정 : 2009년 9월 22일

반응형
728x90
300x250

[PHP/GPLv2] PHP SysInfo 프로젝트 - Sysinfo

저번에 올렸던 한국 LinuxChannel.net 의 sysinfo 프로그램보다 더 역사가 깊고 지금 현재까지 최신버전으로 릴리즈가 되고 있는 PHP SysInfo 프로젝트의 Sysinfo라는 프로그램이 있습니다.

사용환경 : Apache, PHP
운영체제 : 거의 모든 기종 지원
언어지원 : 한국을 비롯한 세계 주요 나라의 언어 지원.

http://phpsysinfo.sourceforge.net/

파일 첨부 :
phpSysInfo-3.0-RC8.tar.gz

스크린샷 :

반응형
728x90
300x250

[PHP/GPLv2] PHP 시스템 정보 확인(sysinfo) - 수정(PHP 5.2 지원)

몇 가지 오류가 수정된 파일입니다.
한글로 번역한 파일인데, 오류가 있어서 수정하였습니다.

[첨부(Attachments)]
sysinfo.2009.07.30.tar.gz

비록 오래된 버전이긴 하나 태스팅을 해보면 동작할 것입니다.
코드를 다룰 수 있다면 수정해서 사용해도 됩니다.
반응형

+ Recent posts