HTTP Method

- GET: 서버에 데이터 요청

- PUT: 리소스를 생성/수정하기 위해 서버에 데이터 전송, 요청시 식별자 필요, 멱등성(Idempotent)

- POST: 리소스를 생성하기 위해 서버에 데이터 전송, 요청시 식별자 필요 없음(데이터가 바디에 포함)

PUT vs POST

- PUT으로 생성 요청을 2 하면, 1개가 생성되고, 2번째는 수정 작업으로

- POST 생성 요청을 2 하면, 2개가 생성됨

GET vs POST

- GET: HTTP 요청URL의 끝에 데이터를 추가하여 전달, URL 데이터가 담기기 때문에 중요 정보가 노출
- POST: HTTP 요청 메시지 바디에 데이터를 추가하여 전달, GET 방식에 비해 상대적으로 안전

 

HTTP 헤더

- Set-cookie: 서버에서 사용자 브라우저에게 쿠키를 전송하기 위해 사용

- Cookie: 사용자 브라우저에서 서버에게 쿠키를 회신하기 위해 사용

 

쿠키 옵션

- httponly: 클라이언트측 스크립트를 사용하여 쿠키에 액세스할 수 있는지 여부, False 설정할 경우 HTTP 외의 스크립트 요청에 의해 쿠키에 접근하거나 쿠키를 조작할 있음

 

robots.txt

- 웹 사이트에 웹 크롤러와 같은 로봇이 접근하는 것을 제어하기 위한 파일

 

로그 보안

- 클라이언트 IP, 접속시간, 요청방식, 요청내용, 상태코드 정보 확인 가능

- 로그 파일이 너무 커지는 것에 대비하여 Log Rotate 기능을 사용할 있음

 

PHP 보안

- allow_url_fopen: OFF 설정하여 원격지 파일의 명령 실행을 방지해야

 

Oauth

- 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준

 

주요 HTTP 응답코드

- 1xx (조건부 응답)

100

계속

요청자는 요청을 계속해야 한다.

서버는 이 코드를 제공하여 요청의 첫 번째 부분을 받았으며 나머지를 기다리고 있음을 나타낸다.

- 2xx (성공)

200

성공

서버가 요청을 제대로 처리했다는 뜻이다. 이는 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰인다.

201

작성됨

성공적으로 요청되었으며 서버가 새 리소스를 작성했다.

202

허용됨

서버가 요청을 접수했지만 아직 처리하지 않았다.

203

신뢰할 수 없는 정보

서버가 요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공하고 있다.

204

콘텐츠 없음

서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않는다.

- 3xx (리다이렉션 완료)

300

여러 선택항목

서버가 요청에 따라 여러 조치를 선택할 수 있다. 서버가 사용자 에이전트에 따라 수행할 작업을 선택하거나, 요청자가 선택할 수 있는 작업 목록을 제공한다.

301

영구 이동

요청한 페이지를 새 위치로 영구적으로 이동했다. GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치로 전달된다.

302

임시 이동

현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청 시 원래 위치를 계속 사용해야 한다.

- 4xx (클라이언트 오류)

400

잘못된 요청

서버가 요청의 구문을 인식하지 못했다.

401

권한 없음

이 요청은 인증이 필요하다. 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다. 상태 코드 이름이 권한 없음

403

Forbidden

서버가 요청을 거부하고 있다. 예를 들자면, 사용자가 리소스에 대한 필요 권한을 갖고 있지 않다.

404

Not Found

서버가 요청한 페이지(Resource)를 찾을 수 없다. 예를 들어 서버에 존재하지 않는 페이지에 대한 요청이 있을 경우 서버는 이 코드를 제공한다.

- 5xx (서버 오류)

500

내부 서버 오류

서버에 오류가 발생하여 요청을 수행할 수 없다.

501

구현되지 않음

서버에 요청을 수행할 수 있는 기능이 없다. 예를 들어 서버가 요청 메소드를 인식하지 못할 때 이 코드를 표시한다.

502

Bad Gateway

서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 잘못된 응답을 받았다.

503

서비스를 사용할 수 없음

서버가 오버로드되었거나 유지관리를 위해 다운되었기 때문에 현재 서버를 사용할 수 없다. 이는 대개 일시적인 상태이다.

504

게이트웨이 시간 초과

서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 제때 요청을 받지 못했다.

https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C

 

XML

- W3C에서 개발된, 다른 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록 권장하는 다목적 마크업 언어

- 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML 한계를 극복할 목적으로 만들어짐

- SGML HTML 장점을 모두 가지고 있음

 

DNSSEC

- 공개키 암호화방식의 전자서명 메커니즘을 DNS 체계에 도입하여 적용

- DNS의 데이터 위-변조 취약점 보강

- DNS 캐시 포이즈닝(Pharming) 공격에 대응 가능

- 대응 불가능한 공격 유형: 피싱, DDoS, 웜바이러스에 의한 호스트 정보 변조

 

DNS

- DNS Record 종류

DNS Record

설명

A

- 호스트 이름을 IPv4 주소에 매핑

AAAA

- 호스트 이름을 IPv6 주소에 매핑

PTR

- Reverse DNS라고도 불림

- IP주소를 기반으로 도메인명 매칭

NS

- DNS 서버 지정

MX

- 메일 서버 지정

CNAME

- 호스트 별칭 정의

SOA

- DNS 영역에 대한 정보 저장

AXFR

- 전체 DNS 영역 전달에 대한 요청

- DNS Zone

Zone

설명

영역

읽기 쓰기 가능

보조 영역

읽기 전용

Stub 영역

Name Server 위치만 저장하며, Name Server 연결시켜주는 영역

- DNS Zone Transfer

   1) Master DNS Slave DNS 간의 Zone 파일 동기화

   2) 기본 설정 모든 IP 대해 허용

   3) Zone Transfer 공격: 악의적인 목적으로 지속적인 Zone Transfer 시도하는 DoS 공격. Zone Transfer 사용하지 않거나 특정 Slave Server 지정하여 Zone Transfer 허용하여 방어 (allow-transfer 옵션)

 

IMAP vs POP3

- IMAP: 온라인 모드와 오프라인 모드를 모두 지원하기 때문에 이메일 메시지를 서버에 남겨두었다가 나중에 지울 있음, 메일의 기본 헤더를 먼저 보고 본문 다운로드 여부 결정 가능

- POP3: 서버에서 이메일을 가져온 서버에서 삭제

 

SMTP

- SMTP 구성요소

   1) MUA (Mail User Agent): 사용자의 메일을 관리하는 프로그램 (아웃룩 )

   2) MSA (Mail Submission Agent): MUA로부터 이메일 메시지를 받아 MTA에게 전달

   3) MTA (Mail Transfer Agent): 전달받은 이메일 메시지를 MDA 전달, 자신의 메일서버에서 호스팅하는 주소가 아니면 다른 메일 서버의 MTA 이메일 메시지 전달 (Ex. Sendmail)

   4) MDA (Mail Delivery Agent): 이메일 메시지를 수신자의 메일 박스로 전달, LDA(Local Delivery Agent)라고도 부름

   5) MRA (Mail Retrieval Agent): 원격 메일 서버에서 이메일 메시지를 수신자의 메일 박스로 전달, MUA 포함되기도 하고 별도의 외부 어플리케이션을 두기도

https://en.wikipedia.org/wiki/Email_agent_(infrastructure)

 

PGP

- 기밀성 + 무결성 + 인증 + 전자 서명을 활용한 송신 부인 방지

- 수신 부인 방지 제공하지 않음

- 메시지 부인 방지 제공하지 않음

 

PEM

- 기밀성 + 무결성 + 인증 + 송수신 부인 방지

- 높은 보안 (메일 유출 시에도 내용 확인 불가)

- 중앙집중식 관리 (구현이 어려움)

 

S/MIME

- 봉인된 데이터 + 서명 데이터 + 순수한 서명 + 전자메시지 인증 + 사용자 인증 + 메시지 무결성 + 송신자 부인방지

- S/MIME 구성요소

   1) 공개키 암호화: RSA, DSA, Diffie-Hellman

   2) 비밀키 암호화: 3DES, RC4, IDEA, DES, RC2

   3) 인증서: X.509 ver3

   4) PKI

 

이메일 헤더

- Received: 직접 메일을 보낸 발송 서버 및 발송자 전자우편 주소를 파악 가능

- From: 발송자의 전자우편 주소를 나타냅니다.

 

메일 서버 관리 (sendmail)

- /etc/mail/access 파일 option

   1) OK : 무조건 수신 허용

   2) RELAY : 메일 릴레이 허용

   3) REJECT : 메일 수신/발신 거부

   4) DISCARD : 메일 폐기

- /etc/aliases 파일: 메일을 지정된 사용자에게 전달

   1) 예시: webmaster 계정으로 들어오는 메일은 user1, user2에게 전달
      webmaster: user1, user2

   2) /etc/aliases 파일 내용 변경 newaliases (또는 sendmail -bi) 명령어 실행 필요
- /etc/mail/local-host-names: Sendmail 설정 관련 파일 최종 수신지 도메인 설정 파일

- /etc/mail/virtusertable: 가상 메일 설정을 통해 여러 명의 User 서로 같은 계정을 요구할 때의 곤란함을 해결

   1) virtusertable 파일 내용 변경 makemap hash virtusertable < virtusertable 명령어 실행 필요

 

URL 메타 문자

?

피라미터 구분자

&

각각의 인자를 구분

=

인자값을 인자로 전달

%

16진수값 표현

+

공백 문자 표현

 

DRM 구성 요소

- 패키저: 컨텐츠를 메타데이터와 함께 배포 가능한 단위로 패키징

- DRM 컨트롤러: 배포된 컨텐츠의 이용권한 통제

- 클리어링 하우스- 컨텐츠 배포정책, 라이선스 및 요금 관리

http://itwiki.kr/w/DRM

 

DOI (Digital Object Identifier, 디지털 객체 식별자)

- “디지털 객체의 식별자(identifier of a digital object)”가 아니라 “객체의 디지털 식별자(digital identifier of an object)”를 의미

- 객체에 URL, 이메일 주소, 다른 식별자 및 설명 메타데이터 등의 식별 정보를 영구적으로 부여

- 객체의 데이터는 변할 있지만 DOI 변하지 않음

- DOI 어플리케이션의 네트워크 내에서 고유한 식별성을 위해 항구성, 해석가능성, 메타데이터와 의미적 상호운용성 제공

https://www.doi.or.kr/wordpress/about_doi/

 

RDBMS 용어

- 릴레이션: 2차원 구조의 테이블

- 튜플: 행

- 속성(Attribute): 열

- 도메인: 속성이 가질 수 있는 값의 집합

- 스키마: DB에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조

- 차수(Degree): 속성의

- 카디널리티(Cardinality): 튜플의

 

전자화폐

- 인출 프로토콜: 은행이 사용자에게 전자화폐를 발급해 주는 절차

- 지불 프로토콜: 사용자가 자신의 전자화폐를 사용하여 상점에 지불

- 예치 프로토콜: 상점이 사용자로부터 받은 전자화폐를 은행이 결제

 

카드의 보안 코드를 칭하는 용어

- CVC(마스터카드), CID(아메리칸 익스프레스), CVV(비자카드)

 

Apache 보안 설정

- DocumentRoot 디렉터리를 별도의 파일 시스템으로 사용

   1) DocumentRoot 디렉터리는 모든 웹 컨텐츠가 저장될 디렉터리 구조이므로, 이 컨텐츠는 웹을 통해 공개됨. 따라서 별도의 파일 시스템을 사용할 것을 권고

      - /etc/httpd/conf/httpd.conf 파일 수정 (기본값: /var/www/html)

        DocumentRoot “<디렉터리 경로>”

   2) 웹 서버의 데몬은 chroot에 설치하여, 웹서버 데몬이 공격당했다고 하더라도 피해를 최소화

- 디렉터리 리스팅 방지

   1) 웹 브라우저에서 사용자가 URL을 입력했을 때, 웹 컨텐츠가 없을 경우, 기본적으로 디렉터리 리스트를 보여주는 것을 방지

      - /etc/httpd/conf/httpd.conf 파일 수정 (아래와 같이 Options 지시자에서 Indexes 옵션 제거)

        <Directory "/var/www/html">

            Options Indexes FollowSymLinks

        </Directory>

- 심볼릭 링크 사용 방지

   1) 심볼릭 링크를 사용하여 다른 중요한 디렉터리(Ex. root)에 접근할 수도 있으므로, 이를 방지

      - /etc/httpd/conf/httpd.conf 파일 수정 (아래와 같이 Options 지시자에서 FollowSymLinks 옵션 제거)

        <Directory "/var/www/html">

            Options Indexes FollowSymLinks

        </Directory>

- CGI 실행 디렉터리 제한

   1) 사용자들이 CGI 스크립트를 어디에서든 실행할 수 있도록 할 경우, 악의적인 CGI를 업로드하여 임의의 명령을 실행시킬 수 있음

   CGI(Common Gateway Interface): 웹 서버와 외부 프로그램 사이에서 정보를 주고 받는 방법이나 규약. , 사용자의 요청에 의한 서버의 응답

      - /etc/httpd/conf/httpd.conf 파일 수정 (아래와 같이 ScriptAlias 지시자에서 지정)

        <IfModule alias_module>

            ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

        </IfModule>

- 아파치 OS 정보의 공개 수준 설정

   1) 404 not found 페이지에서 아파치 버전과 OS 버전이 노출될 있으므로 공개 수준을 설정해야

      - /etc/httpd/conf/httpd.conf 파일 수정

          ServerTokens [설정값]

      설정값 종류

          ProductOnly: 웹서버 종류만

          Min: 웹서버 종류, 버전

          OS: 웹서버 종류, OS

          Full: 모든 정보와 사용된 모듈까지

- 파일 업로드 취약점 방지

   1) AddType 설정으로 특정 확장자의 파일만 허용

      AddType .html .php

- 기타 httpd.conf 옵션

   1) KeepAlive On/Off: 특정 사용자의 지속적 작업 허용 여부 (On: 속도 개선 / Off: 동시접속량 증가)

   2) MaxKeepAliveRequests 횟수: KeepAlive On 경우, 특정 사용자의 최대 요청 가능

   3) KeepAliveTimeout 시간: KeepAlive On 경우, 타임 아웃 설정 시간

   4) DirectoryIndex [경로/파일명]: 초기 페이지 문서 사용 순서

   5) CustomLog [경로/파일명] [로그형식]: 로그 파일 경로

      - 로그 형식: common, combined

 

MySQL 보안

- 외부 네트워크 사용자 접근 차단 방법

   : my.cnf 파일에 bind-address=127.0.0.1 설정 (즉, 로컬 접속만 허용)

 

SQL Injection 방어 방법

- addslashes()

   : 데이터베이스 질의 등에서 처리할 필요가 있는 문자 앞에 백슬래시를 붙인 문자열을 반환

- magic_quotes_gpc

   : 모든 get, post, cookie 데이터에 자동적으로 addslashes() 실행

- mysql_real_escape_string()

   : addslashes()의 확장 버전으로 볼 수 있으며, 기능은 동일하지만, 처리하는 문자가 더 많아짐

   ※ 기존 처리 문자열: 따옴표, 쌍따옴표, 백슬래시, NULL바이트

   ※ 추가 처리 문자열: \x00, \n, \r, \, \x1a

- Prepared Statement 사용

   // This should REALLY be validated too

   String custname = request.getParameter("customerName");

   // Perform input validation to detect attacks

   String query = "SELECT account_balance FROM user_data WHERE user_name = ? ";

   PreparedStatement pstmt = connection.prepareStatement( query );

   pstmt.setString( 1, custname);

   ResultSet results = pstmt.executeQuery( );

   SQL Injection Prevention - OWASP Cheat Sheet Series

 

DB 권한 부여/회수 방법

- 권한 부여: GRANT (Ex. GRANT CREATE TABLE TO USER1)

- 권한 회수: REVOKE (Ex. REVOKE CREATE SESSION,ALTER USER TO USER1)

 

데이터베이스 보안 통제 방법

- 접근제어: 인증된 사용자에게 허가된 범위 내에서 시스템 내부의 정보에 대한 접근을 허용하는 기술적인 방법

- 추론통제: 간접적으로 노출된 데이터를 통해 다른 데이터를 추론하여 다른 데이터가 공개되는 것을 방지

- 흐름통제: 보안 등급이 높은 객체에서 낮은 객체로의 정보흐름을 제어

http://itwiki.kr/w/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EB%B3%B4%EC%95%88

+ Recent posts