SQL Injection SQL Injection 이란? SQL Injection 은 응용 프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL 문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법이다. 주로 사용자가 입력한 데이터를 제대로 필터링하지 못한 경우에 발생한다. 공격 난이도는 비교적 쉬우나, 공격이 성공한다면 피해가 상당하기 때문에 보안 위협 1순위로 불릴만큼 중요한 기법이다. SQL Injection 의 특징 대소문자를 구분하지 않는다. 고유의 값은 따옴표로 감싼다. 객체를 나타낼 때는 백틱 (`) 으로 감싼다. 세미콜론으로 끝낸다. 한 줄 주석의 경우 문장 앞에 ' -- ' 를 붙여서 사용한다. 여러 줄의 주석은 /* */ 로 감싼다. SQL Inje..
CSRF ( Cross Site Request Forgery ) CSRF ( Cross Site Request Forgery ) 란? CSRF는 사이트 간 요청 위조의 줄임말로, 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점이다. 이 취약점을 악용하면 누군가의 계정으로 돈을 보내 금전적인 이득을 취하거나, 광고성 혹은 유해 게시글을 작성할 수 있고, 관리자의 계정을 탈취하여 사이트에 혼란을 야기할 수 있다. CSRF 공격 과정 사용자는 보안이 취약한 서버에 로그인을 한다. 사용자의 세션 정보가 브라우저 쿠키에 저장된다. 공격자는 서버에 인증된 브라우저의 사용자가 악성 스크립트 페이지를 누르도록 유도한다. ex) 악성 스크립트를 게시글에 작성, 메일을 통해 악성 스크립트 전달 등..
SQL SQL이란 무엇인가? SQL은 (Structured Query Language)의 약자로, 데이터베이스 관리 시스템 (DBMS)에서 정보를 저장하고 처리하기 위해 사용되는 데이터 처리 언어를 말한다. SQL은 정보를 표 형식으로 저장하며, 행과 열은 다양한 데이터 속성과 데이터 값 간의 다양한 관계를 나타낸다. [ DBMS ] DBMS (Database management System)는 데이터베이스를 관리하고 운영하는 소프트웨어를 말한다. SQL의 특징 표준 SQL 문법이 존재하기 때문에 DBMS 종류에 얽매이지 않고 사용할 수 있다. SQL은 데이터 연산에 대한 처리가 절차적으로 진행되지 않고, 데이터의 집합 단위로 처리된다. 기본적으로 대소문자를 구분하지 않는다. 다만 가독성을 위해, 또는 ..
도커 ( Docker ) [ 도커(Docker)란 무엇인가? ] 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼을 말한다. 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있으며, 이를 활용하여 환경에 구애받지 않고 어플리케이션을 신속하게 배포 및 확장할 수 있다. 즉, 어떤 환경의 PC나 서버에서도 안정적으로 구동할 수 있게 도와주는 툴인 것이다. [ 도커의 특징 ] Hyper-V를 통해 게스트 OS 환경 위에서 어플리케이션이 구동되는 가상 머신(Virtual Machine)과 달리 도커는 게스트 OS가 필요 없이 어플리케이션을 구동하는데 필요한 패키지만 존재한다면 구동시킬 수 있다. 도커의 컨테이너는 리눅스 자체 기능을 사용하여 프로세스 단위..
05장 파이썬 날개 달기 프로그래밍의 꽃이라 할 수 있는 클래스와 함께 모듈, 예외 처리 및 파이썬 라이브러리에 대해 설명한다. [ 클래스 ] 클래스는 왜 필요한가? 프로그래머들이 가장 많이 사용하는 언어 중 하나인 C 언어에는 클래스가 없다. 클래스는 프로그램에서 필수가 아니라는 것이다. 하지만 사용했을 경우 장점이 많기 때문에 자주 사용된다. 클래스와 객체 클래스는 과자와 과자 틀을 이용하여 예시를 들 수 있다. 과자 틀 = 클래스 과자 틀로 찍어낸 과자 = 객체 클래스는 과자 틀과 비슷하다. 클래스(class)란 똑같은 무언가를 계속 만들어 낼 수 있는 설계 도면(과자 틀), 객체(object)란 클래스로 만든 피조물(과자 틀로 찍어 낸 과자)을 뜻한다. 이러한 객체는 중요한 특징이 하나 있는데, ..
04장 파이썬의 입출력 입출력은 프로그래밍 설계와 관련이 있다. 프로그래머는 프로그램을 만들기 전에 어떤 식으로 동작하게 할 것인지 설계를 한다. 이때, 가장 중요한 부분이 바로 입출력이다. 특정 프로그램만 사용하는 함수를 만들 것인지, 모든 프로그램이 공통으로 사용하는 함수를 만들 것인지, 더 나아가 오픈 API로 공개하여 외부 프로그램도 사용할 수 있게 만들 것인지가 모두 입출력과 관련있는 것이다. [ 함수 ] 함수란 무엇인가? 한 가지 예를 들어보겠다. 우리가 믹서를 사용하여 주스를 만들려 한다고 가정해보자. 우리는 믹서에 과일을 넣고, 믹서를 켜 과일을 갈아 과일 주스를 만든다. 여기서 믹서에 넣는 과일은 '입력', 과일 주스는 '출력(결과값)'이 되는 것이다. 그렇다면 믹서는 무엇일까. 바로 함..