- 2015.03.16
1. 실습 사전 준비
1) php 설치 여부 확인
# rpm -qa | grep php
2) php 설치
- php.i386
- php-devel.i386
- php-mysql.i386
- 나머지 필요 항목은 yum이 알아서 설치
# yum install -y php.i386 php-devel.i386 php-mysql.i386
# service httpd restart
# cd /var/www/html
3) php 설치 확인
php 테스트 코드
# vi test.php
1 <?
2 phpinfo();
3 ?>
http://ip/test.php 에서 페이지 제대로 작동하는지 확인
4) mysql 설치
- mysql-server.i386
# yum install -y mysql-server.i386
# service mysqld start
# mysqladmin -u root password [New_Password]
5) mysql 로그인
# mysql -u root -p
Enter Password:
2. 인증
- ID, Password
- 공인 인증서
- OTP (One Time Password)
- 금액 인증 방식 (AA)
3. SQL
SQL : Structured Query Language
- 구조화된 질의 언어
- 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수목적 프로그래밍 언어 (위키백과)
1) SQL 명령어 종류
DDL ( Data Definition Language) : 데이터 정의어, 데이터 변경 불가
- CREATE : DB 나 Table 생성
- DROP : DB 나 Table 삭제
- ALTER : 속성 변경
DCL ( Data Control Language ) : 데이터 제어어
- GRANT : 권한 부여
- REVOKE : 권한 제거
- BEGIN
- COMMIT
- ROLLBACK
DML ( Data Manipulation Language ) : 데이터 조작어
- SELECT : 조회
- UPDATE : 수정
- DELETE : 삭제
- INSERT : 입력
2) mysql 명령어 - DDL
- db와 table 목록 출력
mysql> show databases;
mysql> show tables;
- db 선택
mysql> use [db_name];
- table 정의
mysql> desc [table_name];
- table 생성 : 데이터를 정의
mysql> CREATE [table_name]( column1 type, column2 type, ... );
* varchar(SIZE) : 선택한 size 로 만들어짐. 대용량 일 시 속도 빠름
* text : size 자동 설정, 대용량 일 시 크기를 계산해야 하기 때문에 속도 느림
- table 삭제 : 테이블 안에 데이터가 남아 있으면 안됨.
mysql> DROP TABLE [table_name];
3) mysql 명령어 - DML
* SELECT : 조회
전체 목록 조회
mysql> Select [column_name], [column_name] ... FROM [table_name];
조건 목록 조회
mysql> Select [column_name], [column_name] ... FROM [table_name] WHERE [condition];
* INSERT : 입력
mysql> INSERT INTO [table_name] VALUES( colomn1, column2, .... )
mysql> INSERT INTO [table_name] ( [column1_name], [column2_name], ...) VALUES( [column1_data], [column2_data], ... );
* UPDATE : 수정
mysql> UPDATE [table_name] SET [column_name] = value, [column_name] = value, ...; (X)
=> 가능하지만 모든 행의 데이터가 바뀌기 때문에 조건 필수
mysql> UPDATE [table_name] SET [column_name] = value, [column_name] = value ... [WHERE condition];
* DELETE : 삭제
mysql> DELETE FROM [table_name]; (X)
=> table 전체 삭제
mysql> DELETE FROM [table_name] WHERE [condition]
[ 실습 ]
mysql> show databases;
mysql> use test;
mysql> CREATE TABLE user ( num int, name varchar(20), id text, pw text );
mysql> show tables;
mysql> desc user;
mysql> DROP TABLE user;
mysql> CREATE TABLE user ( num int, name varchar(20), id text, pw text );
mysql> INSERT INTO user VALUES( 0, 'admin', 'admin', password('1234') );
mysql> INSERT INTO user( num, id, pw ) VALUES(1, 'guest', '1234' );
mysql> SELECT * FROM user;
mysql> SELECT * FROM user WHERE num = 0;
mysql> SELECT * FROM user WHERE id = 'admin';
mysql> SELECT * FROM user WHERE id = "guest";
mysql> SELECT * FROM user WHERE num = 0 and id = 'admin';
mysql> SELECT * FROM user WHERE num = 0 or id = 'admin';
mysql> UPDATE user SET name='guest', pw=password('1234') WHERE num = 1;
mysql> INSERT INTO user VALUES( 2, 'asdf', 'asdf', password('1234') );
mysql> DELETE FROM user WHERE id = 'asdf';
mysql> quit
4. 페이지 작성
[ longin.html ] [ login_check.php ]
input : id, pw -> Auth
<┘ 성공
<┘ 실패
# pwd
/var/www/html
# vi login.html
1 <html>
2 <head>
3 <title> Log In </title>
4 </head>
5
6 <body>
7 <form method=POST action=login_check.php>
8 id <input type="text" name="id"><br>
9 pw <input type="password" name="pw"><br>
10 <input type="submit" value="Login">
11 </form>
12 </body>
13
14 </html>
# vi index.html
17 <li> <a href="login.html">Log In</a> </li>
* Server side script : 서버에서 처리한 결과만 받아볼 수 있음
- php, jsp
* Client side script : 내가 볼 수 있음
- html, Ajax, JavaScript
5. GET, POST
1) http의 stack
http -- Application Protocal
tcp ┐
ip -- 전송
Ethernet ┘
[ HTTP Header ]
- Start-line : POST, URL, HTTP/1.1
- header : 서버와의 원할한 통신 위한 정보
- 빈칸
- Message-Body : id=asdf&pw=asdf .....
이렇게 Message-Body 에 값이 숨겨져서 인수가 전달 되는 것이 POST 방식이다.
반면, header의 url에 정보를 붙여 보내는 방식이 GET 방식이다.
하지만 헤더의 크기가 정해져 있고 url 창에 노출되기 때문에 상대적으로 보안에 취약하다.
ex)
http://gall.dcinside.com/board/list/?id=girl
protocol - URL - WebApplication - ? 로 URL과 변수 구분
(=> ? 앞에 index.php 가 숨겨져 있음)
'Study > 웹보안' 카테고리의 다른 글
| [08] cookie 및 session 이용한 인증, SQL Injection, secure 코딩 (0) | 2015.05.07 |
|---|---|
| [07] php 셋팅, mysql 연동, 계정 인증, Web 인증방식, cookie 이용 인증 및 logout (0) | 2015.05.07 |
| [05] 간단한 웹페이지 작성, index.html, main.css (0) | 2015.05.07 |
| [04] Linux 초기설정, web 개요, html, webserver 구축 (0) | 2015.05.07 |
| [03] 자/후손 선택자, action, a, 부정 속성, px, %, em, css 색상, 배경 이미지, 가시속성(inline & block), 투명도, box, font, 위치속성, z-index (0) | 2015.05.07 |
- 2015.03.13
1. iptables 동작 중지
# cd /etc/sysconfig
# rm -rf iptables
# iptables -F
# iptables -X
하면 재부팅 후에 다시 동작 안함
2. 간단한 웹 페이지 작성
1) <head>
설정(폰트 등), script
2) <body>
내용
3) bootstrap
이미 만들어진 코드를 이용
다운로드 하지 않고도 Bootstrap CDN 을 head만 붙여넣어도 된다.
* Tip - Linux 기본 환경 확인
# locale
# cd /var/www/html
# vi index.html
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<link href="main.css" rel="stylesheet">
</head>
<body>
<div class="nav">
<div class="container">
<ul class="pull-left">
<li> <a href="#">home</a> </li>
<li> <a href="#">sitemap</a> </li>
</ul>
<ul class="pull-right">
<li> <a href="#">sign up</a> </li>
<li> <a href="#">Log In</a> </li>
<li> <a href="#">Help</a> </li>
</ul>
</div>
</div>
<div class="jumbotron">
<div class="container">
<h1> GFriend Fan Page's </h1>
<p> I Love Girl Friends ... </p>
</div>
</div>
<div class="learn-more">
<div class="container">
<div class="row">
<div class="col-md-4">
<h3> member </h3>
<p> Introduce member .. </p>
<a href="#"> member profile </a>
</div>
<div class="col-md-4">
<h3> schedule </h3>
<p> blar blar blar ... </p>
<a href="#"> more schedule </a>
</div>
<div class="col-md-4">
<h3> empty </h3>
<p> ..... </p>
</div>
</div>
</div>
</div>
</body>
</html>
# vi main.css
.nav a {
color: gray;
padding: 14px 10px;
font-weight: bold;
text-transform: uppercase;
}
.nav li {
display: inline;
}
.jumbotron {
height: 400px;
background-image:url('https://pbs.twimg.com/profile_images/551756034780311552/Nvpilgd9_400x400.jpeg');
}
.jumbotron h1 {
color: #ee82ee;
font-size: 50px;
font-family: Arial;
}
.jumbotron p {
color: #000000;
font-size: 20px;
font-weight: bold;
}
'Study > 웹보안' 카테고리의 다른 글
- 2015.03.12
※ 웹 해킹을 제대로 알려면 웹 언어를 제대로 이해해야 한다.
1. 초기 환경 설정
Teamviewer 10 개인용으로 설치
회의 참가하여 수업 진행
CentOS 5.11 32bit 를 VMware Typical 로 설치 진행
2. Web 개요
최초의 웹 사이트 : 1989년, info.cern.ch
지금까지 전 세계 수 억 개의 사이트가 새로 생겨났으며, 현재도 계속 늘어나고 있다.
기술 발전과 그에 대한 반작용으로 수많은 취약점이 발생한다.
(최초의 웹사이트는 어떠한 취약점도 없다.)
1995년 : 세계 최초로 Java aplet을 통해 웹에서 움직이는 화면이 등장했다.
넷스케이프가 Java를 제일 처음 채용하여 한때는 90%까지 점유율을 잠식했다.
최초의 공격 : 2000년 xss 공격으로 myspace에 공격이 이루어졌다.
xss 공격 : <script> 이용
CSRF 공격 : <img> 태그 이용
3. HTML
html : 정적인 페이지
-> Javascript 등을 이용하여 동적으로 표현 가능
-> Ajax 를 이용하여 이미지를 세밀하게 이용 가능
<html> : 가장 최상위
ㄴ <title>
ㄴ <body>
ㄴ <head> ...
4. Web 1.0
~ Java : Web 1.0
Web Browser & Web Server 만으로 동작
* Web Server
- Apache : Open Source
- IIS
Web Server로 부터 소스코드를 받아와 나의 Web Browser에서 구현한다.
5. Web 2.0
CGI 탄생 - 사용자의 detail한 요청을 세밀하게 처리
Web Browser - Interface - Web Server
CGI -> 사용자의 요청을 받아 처리
- C
- perl
- php
- jsp
* WAS (Web Application Server)
실제로는
Web Browser - Web Server - Application 으로 작동함
5. Web Server 구축
설치 여부 확인
# rpm -qa | grep httpd
httpd-2.2.3-91.el5.centos
Apache 실행
# service httpd start
80번포트 LISTEN 확인
# netstat -ant | grep 80
* Tip _ Apache
DocumentRoot(Web root)
dafault : /var/www/html/
default page : index.html
방화벽 해제 필요
# cd /var/www/html/
# vi index.html
1 <!DOCTYPE html>
2 <html>
3 <body>
4 <h1>My First Heading</h1>
5
6 <p>My First paragraph.</p>
7
8 </body>
9 </html>
방화벽 해제
# iptables -X
iptables: Too many links
# iptables -F
웹브라우저로 자신의 ip 접근하면 됨
'Study > 웹보안' 카테고리의 다른 글
| [06] php 및 mysql 설치, 인증, SQL, get & post, http 헤더 (0) | 2015.05.07 |
|---|---|
| [05] 간단한 웹페이지 작성, index.html, main.css (0) | 2015.05.07 |
| [03] 자/후손 선택자, action, a, 부정 속성, px, %, em, css 색상, 배경 이미지, 가시속성(inline & block), 투명도, box, font, 위치속성, z-index (0) | 2015.05.07 |
| [02] form, input, label, textarea, select, div, span, css, id, class, style, img (0) | 2015.05.07 |
| [01] 사전 준비 (0) | 2015.05.07 |



