728x90
300x250

[GNU - 리눅스(Linux)] 우분투 20.04, Apache 2.4, PHP 8, OpenSSL, 가비지컬렉션, IPv6 (3/3)

 

2부에 이어서 3부에서 소개하고자 한다.

[GNU - 리눅스(Linux)] 우분투 20.04, Apache 2.4, PHP 8, OpenSSL, 가비지컬렉션, IPv6 (2/3)
https://yyman.tistory.com/1531

 


6. 소개

아래의 방법으로 작업을 진행할 수 있다.

 


7. [첨부(Attachment)]

 

210406_Ubuntu_20_04_apache_2_4_php_8_ipv6_ssl_guide.z01
10.00MB
210406_Ubuntu_20_04_apache_2_4_php_8_ipv6_ssl_guide.z02
10.00MB
210406_Ubuntu_20_04_apache_2_4_php_8_ipv6_ssl_guide.zip
3.18MB

[Apache License v2.0을 적용받는다.]


* 맺음글(Conclusion)

우분투 20.04에서 Apache 2.4, PHP 8.0, PHP 8.0 확장도구, OpenSSL 사설 인증서 생성, OpenSSL 자가서명 인증서 생성, IPv6 웹브라우저 접속, IPv6 FTP클라이언트(Filezilla) 접속, PHP 8.0의 세션-쿠키 가비지컬렉션에 대해서 살펴보았다.


* 참고자료(Reference)

1. Lanuchpad, http://launchpad.net , Accessed by 2021-04-06, Last Modified 2021-04-06.

2. Enterprise Open Source and Linux | Ubuntu, https://ubuntu.com, Accessed by 2021-04-06, Last Modified 2021-04-06.

3. OpenSSL Foundation, http://www.openssl.org, Accessed by 2021-04-06, Last Modified 2021-04-06.

4. Welcome! - The Apache HTTPServer Project (Apache Foundation), https://httpd.apache.org, Accessed by 2021-04-06, Last Modified 2021-04-06. 

5. PHP: Hypertext Preprocessor, https://www.php.net, Accessed by 2021-04-06, Last Modified 2021-04-06.

6. RFC 2460 - Internet Protocol, Version 6 (IPv6) Specification(IETF), https://tools.ietf.org/html/rfc2460, Accessed by 2021-04-06, Last Modified 2021-04-06. 

-> IETF에서 결정한 IPv6는 최초 공개된 것은 1998년 12월 이다.

7. draft-ieft-ipngwg-bsd-api-IETF(1998), http://tools.ietf.org/html/draft-ietf-ipngwg-bsd-api-new-05 , Accessed by 2021-04-06, Last Modified 2021-04-06.

 

-> 리눅스에서의 적용

    The first IPv6 related network code was added to the Linux kernel 2.1.8 in November 1996 by P******.

    (1996년 12월, 리눅스 커널 2.1.8에 처음 IPv6 관련된 네트워크 코드가 추가되었다.

    It was based on the BSD API.

    (BSD API를 기반으로 했었다.)

 

-> IPv6는 매우 오래 전에 준비를 했었다.

반응형
728x90
300x250

[컴퓨터(PC활용)] - 전자정부프레임워크(이클립스)에서 C++, PHP, Swing 등 - 기능 추가


이번에 소개할 내용은 전자정부프레임워크(이하 "이클립스")에서 C/C++, PHP, Swing 등을 개발하기 위한 기능을 추가로 설치하는 방법에 대해서 소개하겠다.


About this time I will introduce what you are about to install additional features for developing C / C ++, PHP, Swing, etc. In the framework of e-government (hereinafter referred to as "Eclipse").


[기능 추가(Add function)]

1. C/C++

2. PHP

3. Java - Swing, WindowBuilder



1. 소개(Introduce)


전자정부 프레임워크(이하 "이클립스")로 다양한 프로그래밍 개발이 가능하다.
To e-government framework (the "Eclipse"), it is possible to develop a variety of programming.



그림 1. 전자정부 프레임워크 - Install New Software....



그림 2. 전자정부 프레임워크 - Install New Software....




그림 3. 전자정부 프레임워크 - Install New Software....



그림 4. 전자정부 프레임워크 - Install New Software....



2. 프로젝트 생성(Create Project)


전자정부 이클립스로 프로젝트를 생성하면, 새로운 플러그인들이 추가된 것을 확인할 수 있다.


If you create a project with e-Government Eclipse, you can see that new plugins have been added.



그림 5. 프로젝트 생성 모습




3. 첨부(Attachment)


210103_eGovFramework_Eclipse_c_cpp_php_swing_windowbuilder_guide.zip

[GNU/GPL v3 License를 적용받는다.]




* 맺음글(Conclusion)


전자정부 프레임워크(이하 "이클립스")로 "c/c++", "PHP", "Swing, WindowBuilder" 등 기능 추가하는 방법에 대해 살펴보았다.


In the framework of e-government(Eclipse IDE) looked for ways to add "c / c ++", "PHP", "Swing, WindowBuilder" such functions.



* 참고자료(Reference)



반응형
728x90
300x250

[PHP] Oracle, MySQL - PDO 사용방법

 

간결하게 요약해서 작성해보았다.

 


1. Oracle, MySQL 데이터베이스 설계하기

 

데이터베이스를 하나 생성한다.

Member를 생성한다.

 

 

그림 1) Oracle SQL Developer에서 Member 테이블 생성하기(Oracle 18c Express Edition)

 

 

그림 2) HeidiSQL에서 Member 테이블 생성하기(MySQL)

 

 
  CREATE TABLE "C##RABBITSUN2"."MEMBER"
   ( "ID" VARCHAR2(20 BYTE) NOT NULL ENABLE,
 "SUBJECT" VARCHAR2(20 BYTE),
  CONSTRAINT "MEMBER_PK" PRIMARY KEY ("ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;

  CREATE OR REPLACE EDITIONABLE TRIGGER "C##RABBITSUN2"."MEMBER_TRG"
BEFORE INSERT ON MEMBER
FOR EACH ROW
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
       IF INSERTING AND :NEW.ID IS NULL THEN
           SELECT MEMBER_SEQ.NEXTVAL INTO :NEW.ID FROM SYS.DUAL;
           END IF;
  END COLUMN_SEQUENCES;
END;
/
ALTER TRIGGER "C##RABBITSUN2"."MEMBER_TRG" ENABLE;

 Oracle SQL

 CREATE TABLE `member` (
     `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
     `subject` VARCHAR(50) NULL DEFAULT NULL,
      PRIMARY KEY (`id`)
 )
 COLLATE='utf8_general_ci'
 ENGINE=InnoDB
 AUTO_INCREMENT=1;

 MySQL SQL

 

 

 


2. Oracle, MySQL - PDO 사용방법(소스코드)

 

<?php

/*
 * Subject: PDO
 * Created Date: 2019-12-10
 * Author by: 도도(Dodo) / rabbitsun2@gmail.com
 * Description:
 *
 * Reference:
 * 
 */

include 'MySQLDB.php';
include 'OracleDB.php';

$orcl = new OracleDB('127.0.0.1', 'c##rabbitsun2', '1234');
$orcl->connect();

// SELECT 문(OracleDB)
$query = "SELECT * FROM MEMBER";
$list = $orcl->select($query);

/*
foreach($list as $row){
   
    echo $row["ID"] . "/";
    echo $row["SUBJECT"] . "<br>";
   
}
*/

// INSERT 문(OracleDB)
//$subject = '연습';
//$result = $orcl->insert($subject);

$mysqlDB = new MySQLDB('127.0.0.1', 'rabbit2me', '1234', 'rabbit2me');
$mysqlDB->connect();

$list = $mysqlDB->select($query);

foreach($list as $row){
   echo $row["id"] . "/";
   echo $row["subject"] . "<br>";
}
 
$subject = '연습';
$result = $mysqlDB->insert($subject);

?>


[소스코드: index.php]

 

?>

class MySQLDB{
   
    private $hostName;
    private $userName;
    private $passwd;
    private $tns;
    private $dbh;
   
    public function __construct($hostName, $userName, $passwd, $dbname){
       
        $this->tns = "mysql:host=$hostName;dbname=$dbname";
       
        $this->hostName = $hostName;
        $this->userName = $userName;
        $this->passwd = $passwd;
       
       
    }
   
    public function __destruct(){
        unset($this->dbh);
    }
   
    public function connect(){
       
        $tns = $this->tns;
        $db_username = $this->userName;
        $db_password = $this->passwd;
       
        try{
            $this->dbh = new PDO($this->tns, $db_username, $db_password,
                array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
            //echo "참";
        }catch(PDOException $e){
            echo ($e->getMessage());
        }
       
    }
   
    public function select($query){
       
        $stmt = NULL;
        $dbh = $this->dbh;
       
        if ( $dbh != NULL ){
            $stmt = $dbh->prepare($query);
            $stmt->execute();
            $list = $stmt->fetchAll();
           
            return $list;
        }
       
        return NULL;
       
    }
   
    public function insert($subject){
       
        $stmt = NULL;
        $dbh = $this->dbh;
        $query = "INSERT INTO member(subject) VALUES(:subject)";
       
        if ( $dbh != NULL ){
            $stmt = $dbh->prepare($query);
            $stmt->bindParam(':subject', $subject);
            $stmt->execute();
           
            return true;
        }
       
        return false;
       
    }
   
}

?>


[소스코드: MySQLDB.php]

 

?>
class OracleDB{
   
    private $hostName;
    private $userName;
    private $passwd;
    private $tns;
    private $dbh;
   
    public function __construct($hostName, $userName, $passwd){
       
        $this->tns = "(DESCRIPTION =
            (ADDRESS_LIST =
              (ADDRESS = (PROTOCOL = TCP)(HOST = $hostName)(PORT = 1521))
            )
            (CONNECT_DATA =
              (SERVICE_NAME = xe)
            )
        )";
       
        $this->hostName = $hostName;
        $this->userName = $userName;
        $this->passwd = $passwd;
        $this->dbh = NULL;
       
    }
   
    public function __destruct(){
        unset($this->dbh);
    }
   
    public function connect(){
       
        $tns = $this->tns;
        $db_username = $this->userName;
        $db_password = $this->passwd;
       
        try{
            $this->dbh = new PDO("oci:dbname=". $tns . ";charset=UTF8", $db_username, $db_password);
            //echo "참";
        }catch(PDOException $e){
            echo ($e->getMessage());
        }
       
    }
   
    public function select($query){
       
        $stmt = NULL;
        $dbh = $this->dbh;
       
        if ( $dbh != NULL ){
            $stmt = $dbh->prepare($query);
            $stmt->execute();
            $list = $stmt->fetchAll();
           
            return $list;
        }
       
        return NULL;
       
    }
   
    public function insert($subject){
        $stmt = NULL;
        $dbh = $this->dbh;
        $query = "INSERT INTO MEMBER(SUBJECT) VALUES(:subject)";
       
        if ( $dbh != NULL ){
            $stmt = $dbh->prepare($query);
            $stmt->bindParam(':subject', $subject);
            $stmt->execute();
           
            return true;
        }
       
        return false;
       
    }
   
}

?>


[소스코드: OracleDB.php]

반응형
728x90
300x250
[PHP] xampp v3.2.4에서 Oracle-PDO, MySQLi 등 설정하기

 

xampp v3.2.4에서 Oracle-PDO, MySQLi 등 설정하는 방법에 대해 간단하게 소개하겠다.

아래의 그림을 따라하면 된다.

 


1. php.ini 환경설정 하기

 

XAMPP Control Panel v3.2.4은 C:\xampp에 있다.

xampp-control.exe를 더블클릭한다.

 

 

그림 1) xampp v3.2.4 설정하기의 예

 

 

그림 2) xampp v3.2.4 설정하기의 예

 

그림 2처럼 찾기 창을 띄우려면, Ctrl + F를 누른다.

oci를 입력한다.

 

 

그림 3) xampp v3.2.4 설정하기의 예

 

사용하고자 하는 ;extension을 extension으로 바꾼다.

 

 사용하지 않는 것

 사용하는 것

 ;extension

 extension

 

 

 

그림 4) xampp v3.2.4 서비스 시작

 

Apache의 Start를 누르면 그림 4처럼 바뀐다. Apache 글자배경이 녹색계열로 뜨면 정상적으로 서비스가 실행되었음을 알리는 것이다.

 


2. 셈플 소스코드(PHP-PDO)

 

PHP 셈플 코드이다.

 

 

 

그림 5) PHP-PDO-oci 셈플코드

 

<?php

$tns = " 
(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = xe)
    )
  )
       ";
$db_username = "c##rabbitsun2";
$db_password = "1234";

try{

    $conn = new PDO("oci:dbname=".$tns,$db_username,$db_password);
    echo "참";

    }catch(PDOException $e){
    echo ($e->getMessage());
}
 
?>

 

 

그림 6) PHP-PDO-oci 셈플코드 (웹사이트에서 접속하기)

 

그림 6은 localhost/test.php에서 확인할 수 있다.

 


* 참고자료(Reference)

1. PHP: Oracle (PDO) - Manual, Last Modified, Accessed by 2019-12-10, https://www.php.net/manual/en/ref.pdo-oci.php

반응형
728x90
300x250
[GNU(리눅스[Linux])] Lubuntu 18.02에서 Apache2.4, MySQL(Community) 5.7, PHP 7.2, Vim 설치하기, Vi 소개

 

루분투 18.02에서 아파치 2, MySQL 5.7, PHP 7.2, Vim을 설치하는 방법에 대해서 소개하겠다.

 


1. 프로젝트 소개

 

사용되는 프로젝트는 다음과 같다.

 


1-1. Apache 2.4 프로젝트

 

아래의 사이트는 아파치 HTTP Server Project 재단의 홈페이지이다.

https://httpd.apache.org/

 

 

 


1-2. PHP 프로젝트

 

아래의 사이트는 PHP사이트이다.

http://www.php.net

 

그림 1-2-1. PHP.net

 


1-3. MySQL Community

 

아래의 링크를 클릭하면 아래의 사이트에 접속할 수 있다.

https://www.oracle.com/kr/mysql/community.html

 

 

그림 1-3-1. MySQL Community - Oracle

 

https://dev.mysql.com/downloads/mysql

 

 

그림 1-3-2. MySQL Community - Oracle

 

아래의 그림은 개발자를 위한 MySQL 사이트이다.

https://dev.mysql.com/

 

 

그림 1-3-3. MySQL Developer Web - Oracle

 


1-4. Lubuntu 패키지 - 아파치, MySQL, PHP(Apache, MySQL, PHP)

 

아래의 사이트는 우분투에서 배포하는 패키지에 관한 사이트이다.

 

https://packages.ubuntu.com/search?keywords=apache2

https://packages.ubuntu.com/search?suite=default&section=all&arch=any&keywords=mysql&searchon=names
https://packages.ubuntu.com/search?suite=default&section=all&arch=any&keywords=php&searchon=names

 

 

그림 1-4-1. 우분투 Package 사이트 - 도도(Dodo)

 

 

그림 1-4-2. MySQL Package Site - 도도(Dodo)

 


1-5. Vim 프로젝트

 

vim 프로젝트에 관한 것이다.

https://www.vim.org

https://www.vim.org/about.php

 

 

그림 1-5-1. Vim 프로젝트 - 도도(Dodo)

 


1-6. GNU Vi Project

 

아래의 사이트는 GNU 재단에서 소개하고 있는 vi이다.

emac과 Vi의 차이에 대해서 소개하고 있다.

 

https://www.gnu.org/software/bash/manual/html_node/Readline-vi-Mode.html

 

 

그림 1-6-1. Vi 에디터 사용방법 - GNU

 

https://www.gnu.org/fun/jokes/vi.song.html

 

 

그림 1-6-2. GNU Vi 소개 - GNU

 

 


2. 설치하기

 

설치하는 방법은 크게 간단한 명령어로 설치할 수 있다.

 

번호

명령어(Command)

설명(Explaination)

비고(Remarks) 

1

sudo apt-get install apache2 php mysql*

아파치, PHP, MySQL 패키지 형태로 설치하기

 

2

 

 

 

 

 

 

그림 2-1. Apache2, PHP, MySQL 설치하기 - 도도(Dodo)

 

 

그림 2-2. Apache2, PHP, MySQL 설치하기 - 도도(Dodo)

 

Y를 입력하고 엔터키를 누른다.

 

 

그림 2-3. Apache2, PHP, MySQL 설치하기 - 도도(Dodo)

 

 

그림 2-4. Apache2, PHP, MySQL 설치하기 - 도도(Dodo)

 

 

그림 2-5. Apache2, PHP, MySQL 설치하기 - 도도(Dodo)

 

 

그림 2-6. Apache2, PHP, MySQL 설치하기 - 도도(Dodo)

 


3. 실행하기


루분투 18.02에서 아파치 웹서버 동작 유무를 확인하는 방법에 대해서 소개하겠다.

 

"시작 메뉴"를 클릭한다.

"인터넷" 탭을 클릭한 후, "Firefox 웹 브라우저"를 클릭한다.

 

 

그림 3-1. Firefox 웹 브라우저 실행하기 - 도도(Dodo)

 

아래의 웹 페이지가 열리면, "localhost" 또는 "127.0.0.1"을 입력한다.

 

 

그림 3-2. Firefox 웹 브라우저 실행하기 - 도도(Dodo)

 


4. 폴더 확인해보기

 

아래의 그림은 처음 설치된 아파치 서버의 웹 페이지가 저장되어 있는 폴더의 위치이다.

 

/var/www/html

 

 

그림 4-1. 폴더 내용 확인하기 - 도도(Dodo)

 

아래의 그림은 LX Terminal을 실행하는 모습이다.

LXTerminal을 실행시키 위해서 선택 및 클릭을 하는 과정이다.

 

 

그림 4-2. LXTerminal 클릭하기 / 시작메뉴에서 시스템 도구 LX Terminal - 도도(Dodo)

 

번호

명령어

설명(Explaination || Description)

비고(Remarks)

1

sudo -i

관리자 권한으로 변경하기

 

 

 

 

그림 4-2. LxTerminal에서 PHP 파일 생성해보기 - 도도(Dodo)

 

번호 

명령어(Command)

설명(
Explaination ||
Description)

 

1

cd /

루트 경로로 이동

 

2

ls

파일,폴더 등 내용 출력

 

3

cd /var/www/html

/var/www/html으로 이동하기

 

 

 

 

그림 4-3. LxTerminal에서 PHP 파일 생성해보기 - 도도(Dodo)

 


5. Vim 설치하기

 

# sudo apt install vim

 

 

그림 5-1. LxTerminal에서 vim 설치하기 - 도도(Dodo)

 

 

그림 5-2. LxTerminal에서 vim 설치하기 - 도도(Dodo)

 

번호

명령어(Command)

설명(Explaination || Description) 

1

vim phpinfo.php

 vi phpinfo.php 도 사용이 가능하다.

2

vi phpinfo.php

vi 에디터에 익숙한 경우에는 vi 에디터를 사용해도 무방하다.

vim과 큰 차이가 없다고 본다. 명령어 등의 체계 오래된 에디터는 vi이다.

 

 

그림 5-2-1. vi 에디터 사용하기 - 도도(Dodo)

 

 

 

 

그림 5-3. LxTerminal에서 vim 설치하기 - 도도(Dodo)

 

입력으로 전환하려면, i키를 누른다.

그림처럼 타이핑을 한다.

esc키를 누른다.

:키를 누른다.

wq를 입력한다.

 


6. 웹 브라우저 실행하기

 

아래의 그림은 PHP를 웹 브라우저에서 실행시킨 모습이다.

 

 

그림 6-1. Apache 2 (루분투 18.02)에서 localhost 실행하기 - 도도(Dodo)

 

 

 

 

그림 6-2. Apache 2 (루분투 18.02)에서 localhost 실행하기 - 도도(Dodo)

 


7. 맺음글(Conclusion)

 

루분투 18.02에서 아파치2, MySQL Community 5.7, PHP 7.2, Vim을 설치하는 방법에 대해서 소개하였다.

Vi도 소개하였다.

 


8. 참고 자료(Reference)

 

1. PHP.net, Last Modified, Accessed by 2018-08-30, http://www.php.net

2. Welcome! - The Apache Homepage, Last Modified, Accessed by 2018-08-30, https://httpd.apache.org/

3. MySQL :: Developer Zone, Last Modified, Accessed by 2018-08-30, https://dev.mysql.com/

4. MySQL Community Edition | MySQL | 오라클 | Oracle 대한민국, Last Modified, Accessed by 2018-08-30, https://www.oracle.com/kr/mysql/community.html

5. MySQL :: Download MySQL Community Server, Last Modified, Accessed by 2018-08-30, https://dev.mysql.com/downloads/mysql/

6. Ubuntu – Package Search Results -- apache2, Last Modified, Accessed by 2018-08-30, https://packages.ubuntu.com/search?keywords=apache2

7. Ubuntu – Package Search Results -- mysql, Last Modified, Accessed b 2018-08-30, https://packages.ubuntu.com/search?suite=default&section=all&arch=any&keywords=mysql&searchon=names

8. Ubuntu – Package Search Results -- php, Last Modified, Accessed by 2018-08-30, https://packages.ubuntu.com/search?suite=default&section=all&arch=any&keywords=php&searchon=names

9. about Vim : vim online, Last Modified, Accessed by 2018-08-30, https://www.vim.org

10. Bash Reference Manual: Readline vi Mode, Last Modified, Accessed by 2018-08-30, https://www.gnu.org/software/bash/manual/html_node/Readline-vi-Mode.html

11. Addicted to vi - GNU Project - Free Software Foundation (FSF), Last Modified 2015/09/13 15:54:59, Accessed by 2018-08-30, https://www.gnu.org/fun/jokes/vi.song.html

반응형
728x90
300x250

[PHP] OTP와 로그 시스템 (OTP and Log System)

 

root at 127.0.0.1

 

이번에 소개할 것은 OTP와 IP로그 시스템에 관해서 심도적으로 소개하려고 한다.

사용자 인터페이스 관점에서의 OTP는 크게 하드웨어와 소프트웨어로 분류할 수 있다고 가설을 두고 설계하였다.

보안 이슈에서 OTP 시스템이 도입된 지 불과 몇 년 되지 않았다고 본다.

IP 로그와 OTP 시스템의 차이점을 소개하겠다.

 

 


1. OTP란?

 

One time Password라는 용어로 일회성 비밀번호를 생성하는 시스템이라고 부른다.

예를 들면, 사용자가 보유하고 있는 비밀번호 체계로 인증체계를 구현할 때 사용되어진다.

 


2. 사용자 인터페이스 설계하기(Designing the User Interface)

 

사용자 관점에서 "OTP" 인터페이스를 고안하였다.

크게 어렵지 않은 인터페이스 화면으로 디자인 할 수 있다.

 

 

그림 2-1. 소프트웨어 - OTP Generator(OTP 생성기) - 도도(Dodo)

그림 2-1은 소프트웨어 형태의 OTP 생성기이다.

 

 

그림 2-2. 하드웨어 OTP Generator(Hardware OTP Generator) - 도도(Dodo)

 

그림 2-2는 하드웨어 형태의 OTP 생성기이다.

 


3. 웹 페이지에서의 OTP 생성하기(Creating an OTP on a Web Page)

 

아래의 그림은 웹 페이지에서 OTP를 생성하는 것이다.

 

그림 3-1. OTP 생성 구현의 예 - 도도(Dodo)

 

OTP 생성에 관한 소스코드이다. 크게 어렵지 않은 구조로 작성할 수 있다.

 

<?php
/*
 *  Created Date : 2018-08-29
 *  Filename: index.php
 *  Author: Dodo
 */
?>

<?php

function generate(){
    return time() * mt_rand(1, 5);   
}

?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta name="viewport" content="width=320; user-scalable=no" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
 <title>OTP 발생기(OTP Generator)</title>
 <link rel="stylesheet" type="text/css" href="./css/mystyle.css">
</head>
<body>

<!-- OTP Generator Model -->
<table style="width: 100%;">
 <tr>
  <td style="background-color: #FA5882; height:40px">
   <span style="font-size:20px; color:#FFF; font-weight:bold;">
    OTP Generator(OTP 생성기)
   </span>
  </td>
 </tr>
 <tr>
  <td>
   <input type="text" class="otp" name="otp" value="<?php echo generate(); ?>" style="width:100%;height:30px;">
  </td>
 </tr>
 <tr>
  <td>
   <input type="submit" class="generate" value="생성하기" onclick="window.location.reload();">
  </td>
 </tr>
</table>

</body>
</html>

 

 

 

영상 1. OTP 생성기 / 시연 - 도도(Dodo)

 


4. 웹 페이지에서 로그

 

웹 페이지에서 사용자 로그를 생성하는 것에 대해서 소개한다.

 

CREATE TABLE IF NOT EXISTS `log` (
      `id` int(11) NOT NULL auto_increment,
      `createDate` datetime NOT NULL,
      `subject` text NOT NULL,
      `ip` text NOT NULL,
      PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

 

데이터베이스의 테이블 설계는 다음과 같이 간단한 구조로 설계할 수 있다.

 

 

위의 코드를 실행하면 아래처럼 반응하는 것을 볼 수 있다.

 

 

그림 4-1. 웹 페이지에서의 로그 - 도도(Dodo)

 

 

영상 2. 로그 생성 반응 시연 - 도도(Dodo)

 


5. 아파치 웹 서버

 

아파치 웹 서버는 아파치 파운데이션(Apache Foundation)에서 만든 프로젝트이다.

http://www.apache.org

 

 

그림 5-1. 아파치 소프트웨어 재단(Apache Software Foundation) - 도도(Dodo)

 

                   표 1. 영어, 한글로 읽어보기

 

번호

영어 단어

한글 읽기(Hangul)

1

Open

개방, 열다

오픈

2

Software

소프트웨어

소프트웨어

3

Soft

부드러운

소프트

4

Innovation

혁신

이노베이션

5

Community

커뮤니티(공동체)

커뮤니티

6

Consider

고려하다,
중히 여기다

컨시더

 

 

그림 5-2. 아파치 프로젝트 소개 - 도도(Dodo)

 

                                                                         표 2. 영어, 한글로 읽어보기

 

번호

영어 단어 또는 문장

한글 읽기

1

What is the Apache HTTP Server Project?

아파치 HTTP 서버 프로젝트는 무엇입니까? 

 왓 이스 더 아파치 에이치티티피

서버 프로젝트?

2

The Apache HTTP Server Project is a collaborative software development

Apache HTTP Server 프로젝트는
공동 소프트웨어 개발입니다.

디 아파치 에이치티티피 서버 프로젝트 이스 어 콜라브레이티브 소프트웨어 디벨러프멘트.

3

Collaborative

공동

콜라보레이티브

4

effort

노력

에포트

5

Mailing Lists

메일링 리스트

메일링 리스트

6

Trunk (dev)

 트렁크 (개발)

뜻(의역): 저장 보관소

트렁크 (디브)

 

 


6. 맺음글(Conclusion)

 

OTP 시스템과 로그 시스템에 대해서 살펴보았다.

 


7. 참고자료(Reference)

 

1. OTP, Last Modified , Accessed by 2018-08-29, https://ko.wikipedia.org/wiki/일회용 비밀번호

2. PHP: mysql_query, Last Modified, Accessed by 2018-08-29, http://php.net/manual/en/function.mysql-query.php

3. PHP: mysql_set_charset - Manual, Last Modified, Accessed by 2018-08-29, http://php.net/manual/en/function.mysql-set-charset.php

4. Welcome to The Apache Software Foundation!, Last Modified, Accessed by 2018-08-29, https://www.apache.org/

5. About the Apache HTTP Server Project - The Apache HTTP Server Project, Last Modified, Accessed by 2018-08-29, http://httpd.apache.org/ABOUT_APACHE.html

 

Editor: 도도는 도도의 초록누리의 에디터이다. 샵인클루드 족이다.

반응형
728x90
300x250

[PHP] function - UTF8 (한글 완벽 지원 함수 구현)

 

기존에 php의 iconv 함수를 사용하면 완벽한 한글 지원 함수를 구현하기에는 여러가지 문제가 발생된다.

 

사용 프로그램: PHP 5.26

 

그림 1. iconv 함수로만 처리했을 때의 문제, 도도(Dodo)

 

문자열 처리가 사람이 보는 것과는 달리 이러한 문제도 발생될 수가 있다.

문제를 해결할 수 있는 함수가 있다.

 


1. convertToUTF8 ( %s ) 구현하기

 


  // 한글 지원
  public function convertToUTF8($strTxt)
  {
          if(iconv("utf-8", "utf-8", $strTxt) == $strTxt){
               return $strTxt;
          }
          else
         {
              return iconv("euc-kr", "utf-8", $strTxt );
         }
  }

 

그림 1-1. iconv 함수로 기존 UTF8 문자열 감지

 

제어문과 iconv 함수를 활용하여 사람이 식별하지 못하는 문자열을 감지할 수 있다.

euc-kr로 변환해도 되는 경우를 구분하면 그림 1과 같은 문제를 해결할 수 있다.

 

 

반응형
728x90
300x250
[PHP] XSS 소개, 구현

 

XSS에 대해서 소개한다. 스크립트 변조에 관한 것이다.

너무 어렵게만 생각할 필요가 전혀 없다.

 

사용 프로그램: PHP 5.2, PHP 5.6

 


1. 코드로 살펴보는 XSS Filiter

 

XSS 필터에 대해서 간단하게 이해하는 방법이다.

 

class Security{

/*
 * XSS filter
 *
 * This was built from numerous sources
 * (thanks all, sorry I didn't track to credit you)
 *
 * It was tested against *most* exploits here: http://ha.ckers.org/xss.html
 * WARNING: Some weren't tested!!!
 * Those include the Actionscript and SSI samples, or any newer than Jan 2011
 *
 *
 * TO-DO: compare to SymphonyCMS filter:
 * https://github.com/symphonycms/xssfilter/blob/master/extension.driver.php
 * (Symphony's is probably faster than my hack)
 */

        public function xss_clean($data)
        {
               // Fix &entity\n;
              $data = str_replace(array('&amp;','&lt;','&gt;'), array('&amp;amp;','&amp;lt;','&amp;gt;'), $data);
              $data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data);
              $data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data);
              $data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');

              // Remove any attribute starting with "on" or xmlns
              $data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);

              // Remove javascript: and vbscript: protocols
              $data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);

             $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);

             $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);

            // Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
            $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
            $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
            $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);

            // Remove namespaced elements (we do not need them)
            $data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);

            do
            {
                 // Remove really unwanted tags
                 $old_data = $data;
                 $data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
            }

            while ($old_data !== $data);

           // we are done...
           return $data;
     }

}


[첨부(Attachment)]

xssFilter.7z

 

XSS 공격이라는 것은 일반 문자를 UTF8로 변조해서 "<", ">", "applet" 등으로 접근하는 방법도 있을 수 있고. 스크립트 내에 공격하는 기법이다.

 


2. 참고자료(Reference)

 

1. XSS Filiter, https://github.com/symphonycms/xssfilter, Accessed by 2018-08-04

반응형

+ Recent posts