반응형

1. mysql installer를 이용하여 mysql connector 설치

 이 때 아이디는 root이며 비밀번호는 우선 12351235로 설정

 

또한 workbench도 같이 설치

 

mysql installer download 링크

https://dev.mysql.com/downloads/file/?id=490394

 

MySQL :: Begin Your Download

The world's most popular open source database

dev.mysql.com

리눅스의 경우 아래를 따른다.

$ sudo apt-get update
$ sudo apt-get install -y mysql-server-5.7
$ mysql_secure_installation

 

 

2. db연결 및 테이블 생성

C:\Program Files\MySQL\MySQL Server 8.0\bin 로 들어가서 mysql 실행

mysql -h localhost -u root -p
Enter password: 12351235
mysql>

 

nodejs 스키마를 생성하고 이 스키마를 사용하겠다는 것을 MySQL에 알림

 

mysql> CREATE SCHEMA nodejs;
Query OK, 1 row affected (0.01 sec)

mysql> use nodejs;
Database changed

 

nodejs 데이터베이스의 users 테이블 생성

아래 코드를 입력한다.

CREATE TABLE nodejs.users(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT UNSIGNED NOT NULL,
married TINYINT NOT NULL,
comment TEXT NULL,
created_at DATETIME NOT NULL DEFAULT now(),
PRIMARY KEY(id),
UNIQUE INDEX name_UNIQUE (name ASC))
COMMENT = '사용자 정보'
DEFAULT CHARSET=utf8
ENGINE=InnoDB;

 

결과

mysql> CREATE TABLE nodejs.users(
    -> id INT NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(20) NOT NULL,
    -> age INT UNSIGNED NOT NULL,
    -> married TINYINT NOT NULL,
    -> comment TEXT NULL,
    -> created_at DATETIME NOT NULL DEFAULT now(),
    -> PRIMARY KEY(id),
    -> UNIQUE INDEX name_UNIQUE (name ASC))
    -> COMMENT = '사용자 정보'
    -> DEFAULT CHARSET=utf8
    -> ENGINE=InnoDB;
Query OK, 0 rows affected, 1 warning (0.07 sec)

 

table 정보 확인

mysql> DESC users;
+------------+------------------+------+-----+-------------------+-------------------+
| Field      | Type             | Null | Key | Default           | Extra             |
+------------+------------------+------+-----+-------------------+-------------------+
| id         | int(11)          | NO   | PRI | NULL              | auto_increment    |
| name       | varchar(20)      | NO   | UNI | NULL              |                   |
| age        | int(10) unsigned | NO   |     | NULL              |                   |
| married    | tinyint(4)       | NO   |     | NULL              |                   |
| comment    | text             | YES  |     | NULL              |                   |
| created_at | datetime         | NO   |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+------------+------------------+------+-----+-------------------+-------------------+
6 rows in set (0.01 sec)

 

그 뒤, 사용자의 댓글을 저장하는 테이블 생성

아래 코드 입력

CREATE TABLE nodejs.comments (
id INT NOT NULL AUTO_INCREMENT,
commenter INT NOT NULL,
comment VARCHAR(100) NOT NULL,
created_at DATETIME NOT NULL DEFAULT now(),
PRIMARY KEY(id),
INDEX commenter_idx (commenter ASC),
CONSTRAINT commenter
FOREIGN KEY (commenter)
REFERENCES nodejs.users (id)
ON DELETE CASCADE
ON UPDATE CASCADE)
COMMENT = '댓글'
DEFAULT CHARSET=utf8
ENGINE=InnoDB;

 

결과

mysql> CREATE TABLE nodejs.comments (
    -> id INT NOT NULL AUTO_INCREMENT,
    -> commenter INT NOT NULL,
    -> comment VARCHAR(100) NOT NULL,
    -> created_at DATETIME NOT NULL DEFAULT now(),
    -> PRIMARY KEY(id),
    -> INDEX commenter_idx (commenter ASC),
    -> CONSTRAINT commenter
    -> FOREIGN KEY (commenter)
    -> REFERENCES nodejs.users (id)
    -> ON DELETE CASCADE
    -> ON UPDATE CASCADE)
    -> COMMENT = '댓글'
    -> DEFAULT CHARSET=utf8
    -> ENGINE=InnoDB;
Query OK, 0 rows affected, 1 warning (0.06 sec)

테이블명 확인

mysql> SHOW TABLES;
+------------------+
| Tables_in_nodejs |
+------------------+
| comments         |
| users            |
+------------------+
2 rows in set (0.00 sec)

 

워크벤치 GUI를 이용하여 테이블을 만드는 것이 일반적임.

 

3. CRUD 작업하기

CREATE (행 생성)

mysql> INSERT INTO nodejs.users (name, age, married, comment) VALUES ('zero', 24, 0, '자기소개1');
Query OK, 1 row affected (0.02 sec)

mysql> INSERT INTO nodejs.users (name, age, married, comment) VALUES ('nero', 32, 1, '자기소개2');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO nodejs.comments (commenter, comment) VALUES (1, '안녕하세요. zero의 댓글입니다.');
Query OK, 1 row affected (0.01 sec)

 

READ (조회)

mysql> SELECT * FROM nodejs.users;
+----+------+-----+---------+-----------+---------------------+
| id | name | age | married | comment   | created_at          |
+----+------+-----+---------+-----------+---------------------+
|  1 | zero |  24 |       0 | 자기소개1 | 2019-11-03 23:00:10 |
|  2 | nero |  32 |       1 | 자기소개2 | 2019-11-03 23:00:44 |
+----+------+-----+---------+-----------+---------------------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM nodejs.comments;
+----+-----------+--------------------------------+---------------------+
| id | commenter | comment                        | created_at          |
+----+-----------+--------------------------------+---------------------+
|  1 |         1 | 안녕하세요. zero의 댓글입니다. | 2019-11-03 23:03:32 |
+----+-----------+--------------------------------+---------------------+
1 row in set (0.00 sec)

 

UPDATE (수정)

mysql> UPDATE nodejs.users SET comment = '바꿀 내용' WHERE id = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

 

DELETE (삭제)

mysql> DELETE FROM nodejs.users WHERE id = 2;

 

반응형
반응형

이더리움 계열의 코인은 대표적으로 이더리움, 이더리움 클래식, 익스팬스 등이 있다.

RPC연결을 하여 월렛을 컨트롤 하기 위해서는 코어에 접근해서 블록을 syncing 해줘야한다.

 

그런 것을 지원해주는 것은 대표적으로 Go-ethereum(geth)과 Parity이다.

 

Geth

Geth는 이더리움 재단(Ethereum Foundation)이 제공하는 공식 클라이언트 소프트웨어로써, Go언어로 개발되었다.

Geth를 처음 시작하면 네트워크 내의 다른 이더리움 클라이언트(노드node라고도 불림)에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 된다.

 

Geth는 블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신한다. 또한 블록을 채굴하고, 블록체인에 트랜잭션을 추가하고 블록의 트랜잭션을 검증하며 트랜잭션을 실행할 수도 있다. 그리고 RPC를 통해 상호작용할 수 있는 API를 노출하여 서버 역할을 하기도 한다.

 

Parity

패리티(Parity)는 이더리움 프로토콜의 또 다른 구현체이며, 러스트(Rust) 프로그래밍 언어로 개발되었다. 현재 Parity Inc. 라는 기업에서 운영하고 있다.

이더리움 네트워크에 접속할 수 있는 클라이언트 소프트웨어를 개발하는 길은 누구에게나 열려 있으며, C++, 파이썬 및 다른 언어로 작성된 클라이언트도 있다.

 

 

위 2개의 이더리움 프로토콜에 대해서 개발자의 측면에서 설치하고 통신하는 법을 설명해보겠다. (리눅스 기반)

 

코인거래소에서 일해본 개발자라면 알듯이 코인을 상장하려면 아래의 과정을 따라야 한다.

 

1. 해당 코인의 RPC API를 지원하는 소프트웨어를 확인하고 그것을 서버 PC에 설치

2. 그 소프트웨어를 알맞은 명령어를 입력하여 실행하여, 지갑 저장 디렉토리, 체인 db 디렉토리를 설정

 (실행 명령어는 보통 bitcoind, parity, geth 등 simple함.)

3. 블록 syncing이 정상적으로 완료되면, 직접 코딩하거나 RPC 라이브러리를 활용하여 서버 PC의 해당 port에 연결

4. 정상적으로 통신이 되면 Web3j같은 RPC 라이브러리에서 제공하는 명령어를 통하여 입출금, 잔액 조회 등의  행동을 함

 

다음화에서는 Geth에 대해서 설치하고 API연결하는 법을 알아본다.

 

 

반응형
반응형

1. SQL Injection

1) ID 입력란에 'or 1=1#', 비밀번호에 pwpwpw 나 아무것이나 치면 True가 뜨면서 admin으로 로그인이 성공함.

  해결책) 유효성 검사를 통해 특수 문자, 기호를 아이디 란에 입력하지 못하게끔 해야함.

 

2. 웹사이트에 malware 업로드

1) 웹사이트에 php 명령문을 먹는 malware 파일을 게시판에 업로드 함.

2) 업로드가 성공하면 그 파일이 업로드 된 경로를 찾아 들어감

3) 그 뒤 주소창에서 ?cmd=cat/etc/passwd를 입력하면 malware php파일 안에서 명령문이 먹으면서 비밀번호들이 유출 됨.

해결책: 파일을 업로드 시 jpg라던지 pdf 라던지의 확장자명을 강제하며 파일 업로드 권한을 아무에게나 주지 않는다.

 

3. 피싱

1) 피싱파일을 리눅스 환경에서 작성. 

2) 이메일로 보내고 피해자가 파일을 실행함. 이 때 견적서 라던지 회사 파일이라던지 사회공학적 기법으로 접근

3) 확장자는 pdf지만 실행하면 나의 리눅스 환경에서 파일이 실행되었다고 연결이 뜸

4) 그 뒤 cmd 환경에서 내가 원하는 대로 피해자의 컴퓨터를 조작 가능.

   하지만 피해자가 컴퓨터를 종료하면 그 pdf파일을 다시 실행하지 않는 이상 원격조종이 안되기 때문에 컴퓨터가 시작될 때마다 악성파일을 실행시키게끔 레지스트리를 설정 해놓아야함.

 

해결책: 의심되는 메일은 열어 보지말며, 의심되는 파일은 다운받지않는다. 그리고 방화벽으로 외부 통신을 차단한다.

반응형

+ Recent posts