[06] php 및 mysql 설치, 인증, SQL, get & post, http 헤더

|


- 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 가 숨겨져 있음)

 

 

 

And


[05] 간단한 웹페이지 작성, index.html, main.css

|


- 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;
}

 

 

 

And


[04] Linux 초기설정, web 개요, html, webserver 구축

|


- 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 접근하면 됨

 

 

 

And