일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 리눅스커널
- 취약점
- 워게임
- Pwnable.kr
- radare2
- 시스템 프로그래밍
- px4
- C언어
- 알고리즘
- css
- 드론
- 시스템
- kernel
- 어셈블리어
- 컴퓨터구조
- 프로그래밍
- 시스템프로그래밍
- 커널
- Bandit
- pwncollege
- 리눅스
- 리버싱
- write up
- 시그널
- pwn.college
- Leviathan
- C++
- 시스템해킹
- 리눅스 커널
- wargame
Archives
- Today
- Total
Computer Security
#1 PHP와 자바 스크립트 , SQL injection 본문
반응형
PHP란?
- PHP는 서버 측 스크립트다. PHP 프로그램은 내려받기 전에 웹 서버에서 실행된다.
- 웹 브라우저에 내려받은 코드는 프로그램이 실행된 HTML 코드다.
- 내려받은 HTML 코드에는 PHP 프로그램 코드가 포함되어 있지 않는다.
- 그리고 PHP는 MySQL과 연동으로 사용하기에 주로 블로그,SNS,쇼핑몰,일정관리등을 만들때 많이 이용한다.
● PHP와 자바스크립트의 차이점
* PHP (서버 측 스크립트)
- PHP는 서버 측 스크립트입니다. PHP를 내려받기 전에 웹서버에서 실행이 먼저 된다.
- 웹브라우저에 내려받은 코드는 PHP가 포함되지않은 HTML코드다.
- 장점
- 프로그램 코드가 보여지지 않기에 자바스크립트에 비해 보안성이 뛰어나다.
- 웹 브라우저의 버전과 종류에 영향을 받지않는다.
- 웹에 최적화된 언어
- 웹개발에 필요한 수많은 로직들이 함수의 형태로 미리 제공됨
- 크로스플랫폼
- 거의 모든 데이터베이스를 지원
- 가장 많은 공개소프트웨어가 PHP로 만들어짐
- 단점
- 실시간으로 처리하는 경우 적합하지 않다.
자바스크립트
- 자바스크립트는 클라이언트 측 스크립트입니다.
- HTML 파일에 삽입하거나 사진 등을 웹서버에서 내려받습니다.
- 내려받은 자바스크립트 프로그램은 웹 브라우저에서 실행되고 동적으로 화면에 변화가 일어납니다.
- 이처럼 자바스크립트는 웹 브라우저에서 실행됩니다.
장점
- 웹 브라우저에서 하는 조작에 바로 대응할수있다.
- 애니메이션과 같은 마우스에서 움직이면 바로 상호작용하는 것들을 적용할수있다.
- 속도
- 단순함
- 인기
- 정보에 대한 상호운용성
- 서버 로딩
- 풍부한 인터페이스
단점
- 프로그램 코드가 쉽게 읽히기에 보안에 취약하다.
- 웹 브라우저의 버전과 종류에 따라 실행이 불가할수도있다.
- 디버깅 기능이 부족하다
- 단일 상속이다
- 느린 비트 함수이다.
- 코드에 에러하나만 있어도 렌더링을 중지한다.
SQL Injection
- 코드 인젝션의 한 기법으로 클라이언트의 입력값을 조작하여 서버의 데이터베이스를 공격할 수 있는 공격방식을 말한다.
- 주로 사용자가 입력한 데이터를 제대로 필터링, 이스케이핑하지 못했을 경우에 발생한다. 공격의 쉬운 난이도에 비해 파괴력이 어마어마하기 때문에 시큐어 코딩을 하는 개발자라면 가장 먼저 배우게 되는 내용이다.
- 이러한 injection 계열의 취약점들은 테스트를 통해 발견하기는 힘들지만 스캐닝툴이나 코드 검증절차를 거치면 보통 쉽게 발견되기 때문에 탐지하기는 쉬운 편이다.
- 보안회사 Imperva가 2012년에 발표한 보고서에 따르면 월평균 4회가량의 SQL 인젝션 공격이 일어난다고 한다.
- OWASP에서도 수년 동안 인젝션 기법이 보안 위협 1순위로 분류되었던 만큼 보안에 각별한 주의가 필요하다.
블라인드 SQL 인젝션
- 'Blind SQL' 인젝션은 쿼리의 결과를 참과 거짓으로만 출력하는 페이지에서 사용하는 공격이다.
- 출력 내용이 참 / 거짓 밖에 없어서 그것을 이용하여 데이터베이스의 내용을 추측하여 쿼리를 조작한다.
방어 방법
클라이언트 측의 입력을 받을 웹 사이트에서 자바스크립트로 폼 입력값을 한 번 검증하고, 서버 측은 클라이언트 측의 자바스크립트 필터가 없다고 가정하고 한 번 더 입력값을 필터한다.
이때 정규표현식등으로 한번 걸러내고, SQL 쿼리로 넘길 때 해당 파라미터를 prepared statement로 입력받고 이를 프로시저로 처리하는게 좋다.
다음, 쿼리의 출력값을 한 번 더 필터하고(XSS 공격 방어의 목적이 강하다) 유저에게 전송한다.
이렇게 하면 해당 폼에 대해서는 SQL injection 공격이 완전히 차단된다.
반응형
Comments