만약 테이블에 한글 데이터가 저장이 안된다면

  • 1회성 방법
    • 왼쪽 객체브라우저에서 내 DB 찾기. 안보이면 root@localhost 우클릭 후 객체 브라우저 새로고침 클릭
    • 내 DB(실습에서는 board라고 만듦) 우클릭 -> 데이터베이스 변경 선택 -> 아래와 같이 수정
      • 데이터 베이스 문 : utf8mb4
      • 데이터 베이스 대 : utf8mb4_general_ci
    • 변경 버튼 클릭
    •  
     

  • 영구적인 방법
    • 윈도우키 누르고 my.ini 실행
    • 아래 내용으로 바꾸고 저장
        [mysqld]
        datadir=C:/Program Files/MariaDB 10.11/data
        port=3306
        innodb_buffer_pool_size=2026M
        character-set-server=utf8mb4
        [client]
        port=3306
        plugin-dir=C:\Program Files\MariaDB 10.11/lib/plugin
    
    • 윈도우키 누르고 서비스 실행
    • 서비스 목록 중 MariaDB 찾아서 우클릭 - 다시시작 클릭
    • sqlyog 재시작

'DB' 카테고리의 다른 글

DBMS,Spring 3월 24일 6회차  (0) 2023.03.30
DBMS,Spring 3월 23일 5회차  (0) 2023.03.30
DBMS,Spring 3월 22일 4회차  (0) 2023.03.30
DBMS,Spring 3월 21일 3회차  (0) 2023.03.30
DBMS,Spring 3월 17일 2회차  (0) 2023.03.30

SQL 인젝션이란 ?

SQL 인젝션은 웹 사이트의 보안상 허점을 이용해 특정 SQL 쿼리문을 전송하여 공격자가 원하는 데이터베이스의 중요한 정보를 가져오는 해킹 기법을 말한다.

 

SQL 인젝션의 종류와 공격 방법

Error based SQL Injection - 논리적 에러를 이용한 SQL 인젝션
앞서 예를 들어 설명한 기법이며 해당 기법으로 SQL 인젝션에 대한 기본을 설명하는게 일반적이다.

[로그인 예]

SELECT * FROM client WHERE name='anjinma' and password='12345';

SELECT * FROM client WHERE name='anjinma' and password=' or '1'=1

' or '1' = 1를 넣어서 1과 1이 같으면 참이므로 1 = 1참이다. or 은 앞에 값과 뒤에 값 중 하나라도 참이면 참이므로 이 구문은 참이 되어 로그인에 성공하게 된다.

UNION based SQL Injection = UNION 명령어를 이용한 SQL Injection

SQL UNION이란 ?

여러 개의 SQL문을 합쳐 하나의 SQL문으로 만들어주는 방법이다. UNION과 UNION ALL로 나뉘는데 중복 값을 제외하고 안하고의 차이다. UNION은 중복값을 제외하고 UNION ALL은 제외 하지 않고 전체를 합친다.

SELECT name from classa 
UNION
SELECT name from classb;

하게 되면 클래스 A와 클래스 B 이름들이 합쳐져서 출력된다. (중복된 이름을 제외하고) UNION으로 합쳐지는 두 테이블은 컬럼 갯수가 일치해야만 오류가 나지 않는다.

[외부 입력]

ID: 'test' UNION SELECT 1, 1 --
PW: anything

[실행 쿼리]

SELECT * FROM users WHERE ID = 'test' UNION SELECT 1, 1 -- AND PW = 'anything'

실행 쿼리대로 하면 users 테이블에 등록된 ID와 PW 목록을 전부 조회할 수 있게 된다.

Blind SQL Injection - Boolean based Blind SQL Injection

평번한 SQL 삽입과 같이 원하는 데이터를 가져올 쿼리를 삽입하는 기술이다. 이것은 웹에서 SQL 삽입에 취약하나 데이터베이스 메시지가 공격자에게 보이지 않을 때 사용한다. 하지만 평범한 SQL 삽입과 다른점은 평범한 SQL 삽입은 쿼리를 삽입하여 원하는 데이터를 한번에 얻어낼 수 있는 데에 비해 Blind SQL 삽입은 참과 거짓, 쿼리가 참일때와 거짓일 때의 서버의 반응만으로 데이터를 얻어내는 기술이다. 즉, 쿼리를 삽입하였을 때 쿼리의 참과 거짓에 대한 반응을 구분할 수 있을때에 사용되는 기술이다. Blind SQL 삽입은 위 두 함수를 이용하여 쿼리의 결과를 얻어 한글자씩 끊어온 값을 아스키코드로 변환시키고 임의의 숫자와 비교하여 참과 거짓을 비교하는 과정을 거쳐가며 계속 질의를 보내어 일치하는 아스키코드를 찾아낸다. 그러한 과정을 반복하여 결과들을 조합하여 원하는 정보를 얻어냄으로써 공격을 이루어지게 한다. 많은 비교과정이 필요하기 때문에 악의적인 목적을 가진 크래커들은 Blind SQL 삽입 공격을 시도할 때에 자동화된 툴을 사용하여 공격한다. 취약점이 발견된다면 순식간에 많은 정보들이 변조되거나 크래커의 손에 넘어가게 된다.

Blind SQL Injection - Time based SQL

어떤 경우에는 응답의 결과가 항상 동일하여 해당 결과만으로 참과 거짓을 판별할 수 없는 경우가 있을 수 있다. 이런 경우 시간을 지연시키는 쿼리를 주입(injection)하여 응답 시간의 차이로 참과 거짓 여부를 판별할 수 있다.

정리하면 Blind SQL 인젝션 기법은 쿼리가 참, 거짓일 때 서버의 반응만으로 데이터를 얻어낼 수 있는 공격 기법이다. 이 기법은 여러 조건에 대한 과정을 거쳐야 필요한 정보를 얻을 수 있기 때문에 코드를 짜거나 자동화 도구로 보통 공격하는게 일반적이다.

SQL 인젝션 대응방안

MySQL의 경우 mysqli_real_escape_string(); 함수를 사용하는 방법이 있다.
SQL에서 특별한 의미를 갖는 문자들을 이스케이프해서 SQL 삽입을 방지하는 방법이다.

 

출처:https://velog.io/@ragnarok_code/DataBase-SQL-%EC%9D%B8%EC%A0%9D%EC%85%98%EC%9D%B4%EB%9E%80

클라이언트와 서버는 무슨 관계일까

클라이언트는 네트워크를 통해 서비스를 요청하는 컴퓨터나 장치를 말한다 예를 들어, 웹 브라우저를 사용하여 인터넷에서 웹 페이지를 요청할 때, 해당 웹 브라우저는 클라이언트 역할을 한다. 클라이언트는 서버에게 요청을 보내고, 서버로부터 응답을 받아서 그 결과를 화면에 출력한다.

반면에 서버는 네트워크에서 클라이언트의 요청을 받아서 처리하고, 그 결과를 클라이언트에게 전송하는 컴퓨터나 장치 예를 들어, 인터넷에서 웹 페이지를 요청받아 해당 페이지를 제공하는 컴퓨터는 서버 역할을 한다.

즉, 클라이언트와 서버는 서로 다른 역할을 하면서 서로 통신하여 네트워크에서 데이터를 주고받는다. 클라이언트는 서비스를 요청하고, 서버는 요청된 서비스를 제공하는 역할을함. 이러한 클라이언트-서버 모델은 인터넷이나 로컬 네트워크에서 매우 중요한 역할이다

'DB > DB 필요한 지식' 카테고리의 다른 글

SQL 인젝션이란?  (0) 2023.04.09
포트 포워딩이란?(port forwarding)  (0) 2023.04.08
Primary key,foreign key 비교와 그 외의 key들  (0) 2023.03.17

자바를 주로 하고 db는 곁들이는 식으로 가지만 포트 포워딩이란 개념은 항상 등장한다

지금은 자세히 몰라도 된다지만 궁금하기에 찾아보았다

포트 포워딩(영어: port forwarding) 또는 
포트 매핑(영어: port mapping)은 컴퓨터 네트워크에서 패킷이
라우터나 방화벽과 같은 네트워크 게이트웨이를 가로지르는 동안 
하나의 IP 주소와 포트 번호 결합의 통신 요청을 다른 곳으로 넘겨주는 네트워크 주소 변환(NAT)의 응용이다
. 이 기법은 게이트웨이(외부망)의 반대쪽에 위치한 보호/내부망에 상주하는 호스트에 대한 서비스를 생성하기
위해 흔히 사용되며,
통신하는 목적지 IP 주소와 포트 번호를 내부 호스트에 다시 매핑함으로써 이루어진다

-출처 위키백과

 

무슨 뜻인지 모르겠다 일단 용어 풀이부터 해보자

 

규칙 : 어떤 포트에 어떤 대상을 연결할지 정하는 것
규칙 이름 : 여러 규칙을 식별하기 위함
프로토콜 : 네트워크 접속 방식
호스트IP : 라우터(여기서는 VirtualBox의 가상라우터) IP
호스트포트 : 라우터를 통해 접근하고자 하는 게스트IP와 매핑할 포트번호
게스트IP : 접근하고자 하는 대상 사설 IP
게스트포트 : 게스트 OS에서 접근하자고 하는 프로세스(프로그램, 서비스) 포트

네트워크에서 ~P로 끝나는건 대부분 프로토콜이다 여기서 계속 등장하는 ip에 대해 더 알아보자

 

 아이피

포트 포워딩을 이해하려면, 우선 필요한 개념이 여러가지가 있는데,
그 중 중요한 것이 공인, 사설, 외부, 내부 아이피다.

  • 아이피란?IP 주소를 줄여 IP라고 부르기도 하나, 이는 인터넷 규약을 가르키는 말이기 때문에 구분해야 한다.
    하지만, 쉬운 이해를 위해 이 글에서는 ‘아이피’로 줄여서 부르겠다.
  • IP 주소는 Internet Protocol Address 의 약자로 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신하기 위해 사용하는 특수한 번호이다.
  • 공인 아이피란?각 공인 아이피는 세상에서 유일한 주소를 가진다.
  • 공인 아이피는 유일한 값이기 때문에 중복되지 않는다.
    0~225까지의 숫자 4개로 구성되는 IPv4는 약 42억개의 주소만 할당할 수 있고,
    이를 전세계 모든 장비에 할당하기에는 현재 아이피 체계가 많이 부족하다.
    그래서 외부 네트워크가 필요하지 않은 장비에 대해서는 별도의 사설 네트워크를 구축하게 된다.
  • 인터넷 상에서 다른 PC와 통신하기 위해 필요한 아이피로 서버를 구축하거나, 각자의 PC에 인터넷을 연결하는 경우, 인터넷을 통한 통신을 하기 위한 아이피다.
  • 사설 아이피란?주변에서 흔하게 볼 수 있는 예로 공유기를 활용한 구성으로, 공유기를 활용해 망을 구성하면 보통 192.168.x.x 형태로 구성되는데, 이를 사설 아이피라고 한다.
  • 사설 아이피는 내부망에서만 사용되기 때문에, 서로 다른 내부망에서는 동일한 사설 아이피를 가져도 상관없다.
  • 내부 네트워크 상에서 각 컴퓨터 간 통신하기 위해 필요한 아이피로 내부망을 구축할 때 활용하는 아이피다.
  • 외부 아이피란?공인 아이피와 외부 아이피가 동일 시 되는 경우가 많은 것 같은데, 알아본 바에 따르면 엄연히 다른 개념인 것을 알 수 있다.
    대체로, 현재 포함된 네트워크가 인터넷 망과 공유기를 통해 연결된 경우가 대부분이지만,
    별도의 네트워크를 설정하지 않은 가상머신을 사용하는 경우, 가상머신의 외부 아이피는 가상 머신을 구동하는 PC의 내부 아이피를 가진다.
    (가상 머신의 외부 네트워크는 가상 머신을 구동하는 PC기 때문이다.)
  • 기기가 현재 포함된 네트워크를 외부의 네트워크를 외부 네트워크라 부르고,
    이 외부 네트워크와 통신할 때 사용하는 아이피다.
  • 내부 아이피란?
  • 기기가 현재 포함된 네트워크 내부에서 사용하는 아이피다.

그래서 포트 포워딩이 필요한 이유는?

 

포트 포워딩이 필요한 이유

  • 포트 포워딩이란?별도의 설정 없이 외부 아이피가 접속을 시도할 때, 내부에 어떤 프로세스(서비스) 또는 기기와 연결할 지 알 수 없기 때문에 접근이 불가능하다.
  • 그래서 특정 프로세스(서비스) 또는 기기에 접근하기 위해 포트 포워딩을 통해 외부 아이피 : 특정 포트로 접속하면 내부 아이피 : 특정 포트로 맵핑해준다.
  • 포트 포워딩은 외부 아이피 : 포트번호와 내부 아이피 : 포트번호를 연결해주는 기능이다.

 

포트 포워딩은 인터넷에서의 접속 가능성을 높이기 위해 사용된다 

포트 포워딩은 인터넷을 통해 연결된 라우터, 통칭 공유기를 사용할 때 일반적으로 사용된다 라우터는 인터넷에 연결된 모든 장치들의 데이터 통신을 관리하는데 각각의 장치는 라우터에게 IP 주소를 부여 받는다

하지만, 일부 장치들은 인터넷에 직접 연결되어 있지 않기 때문에 외부 인터넷에서 해당 장치로의 접속이 불가능. 이런 경우에 포트 포워딩을 사용하여 해당 장치로의 접속을 가능하게 할 수 있다.

집에서 내부 네트워크에 연결된 NAS(Network Attached Storage) 장치가 있다고 가정해보면, 이 장치에 대한 외부 인터넷에서의 접속은 불가능. 하지만, NAS 장치는 라우터에 연결되어 있기 때문에 라우터를 통해 외부 인터넷에서 NAS 장치로의 접속을 가능하게 할 수 있다 이때, 라우터의 설정에서 포트 포워딩을 통해 외부 인터넷에서 접속 가능한 포트 번호를 설정해주면, 해당 포트 번호로 접속하는 모든 데이터가 NAS 장치로 전달되도록 설정할 수 있습니다.

즉, 외부와 통신 연결하기 위한 안전한 연결과정이라고 보면 된다.

출처=https://velog.io/@dha/%ED%8F%AC%ED%8A%B8-%ED%8F%AC%EC%9B%8C%EB%94%A9-%EC%99%9C-%ED%95%98%EB%8A%94-%EA%B1%B8%EA%B9%8C

'DB > DB 필요한 지식' 카테고리의 다른 글

SQL 인젝션이란?  (0) 2023.04.09
클라이언트와 서버  (0) 2023.04.08
Primary key,foreign key 비교와 그 외의 key들  (0) 2023.03.17

f6누르면 오류있어도 강제 실행해서 어디서 막히는지 보여줌
디버그 모드에서

컨트롤 쉬프트 r 하면 스프링 내 검색가능 편함

작업 21, 로그인 기능 구현, 비밀번호 시도 횟수 추가
작업 22, 컨테이너 도입, SQL 에러메세지가 console에 보이도록
작업 23, member profile 기능 추가
작업 24, 로그인, 로그아웃 체크
작업 25, 게시물 작성시 작성자의 회원번호 저장

숙제 - 노션 사용법 영상 찾아보기

게시물 조회 시 작성자 이름이 나오도록 구현해보기
join 활용

프론트 나가기 전에 복습 확실히 해두기

'DB' 카테고리의 다른 글

MySql -sqlyog 한글 깨짐 해결법  (0) 2023.04.11
DBMS,Spring 3월 23일 5회차  (0) 2023.03.30
DBMS,Spring 3월 22일 4회차  (0) 2023.03.30
DBMS,Spring 3월 21일 3회차  (0) 2023.03.30
DBMS,Spring 3월 17일 2회차  (0) 2023.03.30

작업 17, 회원가입시 아이디중복체크
작업 18, MemberController 도입
작업 19, ArticleController 도입
작업 20, MVC 구조 도입

회원가입에 필요한 필수 요소들
넣기 이름등

아이디 중복 체크하기
Boolean 에서 0은 false, 1은 true 이다.

SELECT COUNT() > 0 은 COUNT()이 0보다 크면 1 이고 , COUNT(*) 가 0보다 크지 않으면 0 이다.

DBUtil.selectRowBooleanValue(conn, sql)의 값이 1(true)이 나오면 사용중인 아이디가 있다는것.

패스워드 일치 체크하기
if (loginId.trim().length() == 0) , 아이디가 공백이면 다시 입력받도록 구현 비밀번호,

비밀번호 확인도 마찬가지로 공백이면 continue 하여 각각 비밀번호와, 비밀번호 확인만 다시 입력받도록 구현

공백만 아니라면 일단 패스워드,패스워드 확인을 받고 boolean loginPwCheck 의 값이 비밀번호와 비밀번호확인이 일치하지 않을때 false를 대입한다. loginPwCheck가 true 일때만 while문 종료하게 구현, loginPwCheck가 false이면 다시 비밀번호부터 다시 입력받도록 구현

로그인 아이디 체크

아이디 확인 -컨트롤러 도입
->app의 기능 분할

글쓰기 조건- 로그인
글삭제, 수정 권한 - 로그인 id=글쓴이 id

-서비스 도입 -컨테이너 도입

하려는 게시판 구조 MVC
Main
↓↑
App
디스패처 서블릿(입구컷 하는애들)
↓↑
각각의 컨트롤러 - 고객의 요청받고
↓↑
관련 서비스를 - 메인로직(판단)
↓↑
DAO

(Container) -> 모듈들이 들어있는 따로 파생되어있는 장소
공유되는 자원들을 모아둔 장소라고 생각하면 된다.(작업28,참고)

은행 업무에 비유

저 사이사이 왔다 갔다 하는애들은 dto

글쓴이의 이름이 나오도록 하고프면

Article 의 멤버 아이디랑

Memer의 Id(name)이랑 같아야함

module 화 라고 한다(작업 28때 했던것.) ->2023_03_24 시험때 구현못함 -> join 개념이다(작업29에 설명)

중간다리 역할 하는 녀석을 만들껀데

그것이 Container서로 공유하는 공유자원

생성자 super();
부모 생성자를 자식 생성자에서 실행하겠다
반드시 첫줄에서 써야함

https://ehddbsdl22.tistory.com/113 sql문제 연습 답

SHA-256 암호 알고리즘 그냥 알아두기
sha256 해시 생성기
qr 코드로도 만들어줌

선형 구조 vs 트리 구조
탐색 방법이 다르다

'DB' 카테고리의 다른 글

MySql -sqlyog 한글 깨짐 해결법  (0) 2023.04.11
DBMS,Spring 3월 24일 6회차  (0) 2023.03.30
DBMS,Spring 3월 22일 4회차  (0) 2023.03.30
DBMS,Spring 3월 21일 3회차  (0) 2023.03.30
DBMS,Spring 3월 17일 2회차  (0) 2023.03.30

참고 : 자바 Map
작업 12, DBUtil, SecSql, SqlErrorException 추가
작업 13, DBUtil을 활용하여 소스코드 정리
작업 14, 게시물 삭제 기능 구현
작업 15, 게시물 상세보기 구현
작업 16, 회원가입 기능 구현중, 비밀번호 체크, 필수입력

자바 map 검색,프로그래머스 sql 풀기

MIN MAX COUNT AVG
GROUP BY
ORDER BY
HAVING 문법 정리

    	Connection conn = null;
    	PreparedStatement pstmt = null;
    	ResultSet rs = null;

이것들이 필요. 사용 문법은 찾아보면 된다

sql.append 그냥 쓰는거다 도구 오류 잡기 쿼리랑 비슷한 느낌
저절로 띄어쓰기 해준다

DBUtil.row rows 단수 복수 차이가 있음

https://velog.io/@kkk125504/%EC%9E%90%EB%B0%94-JDBC-%EA%B2%8C%EC%8B%9C%ED%8C%90-4%EC%9D%BC%EC%B0%A8

좋은 링크

'DB' 카테고리의 다른 글

DBMS,Spring 3월 24일 6회차  (0) 2023.03.30
DBMS,Spring 3월 23일 5회차  (0) 2023.03.30
DBMS,Spring 3월 21일 3회차  (0) 2023.03.30
DBMS,Spring 3월 17일 2회차  (0) 2023.03.30
DBMS,Spring 3월 16일 1회차  (0) 2023.03.30

작업 6, 게시물 작성시 DB에 INSERT
작업 7, JDBC SELECT 테스트
작업 8, 게시물 리스팅 시 데이터를 DB로부터 가져오기
작업 9, 게시물 수정 기능 구현
작업 10, Main 클래스의 로직을 App 클래스로 이전
작업 11, 각 기능 내부에서 Connection 하지 않고 명령어 입력시 연결하도록

자바에서
insert ,select,update 기능 구현

select는 db에서 받는 값이라 ResultSet rs = null; 저장

join은 테이블끼리 연결
on 은 where의 느낌
그냥 join만 하면 모든 경우의수를 다 갖다 붙인다
-join 문제 풀어보기

'DB' 카테고리의 다른 글

DBMS,Spring 3월 23일 5회차  (0) 2023.03.30
DBMS,Spring 3월 22일 4회차  (0) 2023.03.30
DBMS,Spring 3월 17일 2회차  (0) 2023.03.30
DBMS,Spring 3월 16일 1회차  (0) 2023.03.30
DB 와 DBMS란?  (0) 2023.03.17

작업 2, JAM 시작
작업 3, mySql connector J 추가
작업 4, JDBC 연결 테스트
작업 5, JDBC Insert 테스트

모든 행(row)의 id 값은 유니크 해야한다.(ADD PRIMARY KEY(id))
auto_increment 를 걸기전에 해당 칼럼은 무조건 key 여야 한다.
auto_increment 는 보통 primary key에 건다

jdk15-java-spring 순으로 깔기 -> 집에서
c:\ 폴더에 C:\workspace_cgh 작업 폴더 만들기
영상보며 노트북에 깔기

JDBC 연결되려면 되어야 하는 조건
1.XAMPP 연결
2.Mysql 데이터가 있어야함 3.스프링 내에서 연결 문법 적기 4.연결 성공이 떠야함

!!!db.sql이란 폴더를 하나 만들어서
그때그때의 db값을 저장해본다!!! sql로그 실행 때 초기화 될 수 있어서
메모장 형식도 상관없다

db 커넥팅~오류잡기 코드는 복붙해서 쓴다
뭐가 어떤 느낌인지만 알면 됌

'DB' 카테고리의 다른 글

DBMS,Spring 3월 23일 5회차  (0) 2023.03.30
DBMS,Spring 3월 22일 4회차  (0) 2023.03.30
DBMS,Spring 3월 21일 3회차  (0) 2023.03.30
DBMS,Spring 3월 16일 1회차  (0) 2023.03.30
DB 와 DBMS란?  (0) 2023.03.17

쿼리문 외우기
데이터 타입 , 크기 검색

XAMPP 설정 MYsql ->집에서 할 것
sqlyog 깔기

sql 활용 1
sql 활용 2
sql 활용 3

데이터 정의어(DDL): 데이터베이스, 테이블, 인덱스 등 데이터의 구조를 정의하는 데 사용됩니다. 대표적인 DDL 명령어로는 CREATE, ALTER, DROP 등이 있습니다.

데이터 조작어(DML): 데이터베이스의 데이터를 조작하는 데 사용됩니다. SELECT, INSERT, UPDATE, DELETE 등이 대표적인 DML 명령어입니다.

데이터 제어어(DCL): 데이터베이스의 보안, 권한 등을 제어하는 데 사용됩니다. GRANT, REVOKE 등이 대표적인 DCL 명령어입니다.

데이터 검색어(DQL): 데이터베이스에서 데이터를 검색하는 데 사용됩니다. SELECT가 대표적인 DQL 명령어입니다.

'DB' 카테고리의 다른 글

DBMS,Spring 3월 23일 5회차  (0) 2023.03.30
DBMS,Spring 3월 22일 4회차  (0) 2023.03.30
DBMS,Spring 3월 21일 3회차  (0) 2023.03.30
DBMS,Spring 3월 17일 2회차  (0) 2023.03.30
DB 와 DBMS란?  (0) 2023.03.17

+ Recent posts