1. 아파치 웹 인증


 -설정파일 : /etc/httpd/conf/httpd.conf  //317줄




<directory /var/www/html>    

 ...

         AuthType Basic      // 이런식으로 중간에 추가해준다.

         AuthName "Basic Authentication"

         AuthUserFile /var/www/html/.htpasswd  //사용자파일 경로

         Require valid-user         //어떤 사용자에게 인증을 요구하냐

</directory>

       



이렇게 인증칸이 생겼다.


인증 아이디 만드는법

AuthUserFile /var/www/html/.htpasswd 

즉, /var/www/html 위치에서 

htpasswd -c .htpasswd user1


htpasswd -c [파일명] [아이디]

// -c 옵션은 아예 처음 만들 때만 사용 한다.






2. 인증 처리 프로그램 작성

- 데이터 베이스 (DataBase)


SQL(Structured Query Language)

     -구조화된 질의 언어

     - CREATE , DROP, SELECT , INSERT , UPDATE ,         DELETE


1. DDL(Data Definition Language)


- 데이터를 정의할 수 있는 구문

- 생성 및 삭제 : CREATE , DROP


2. DML(Data Manipulation Language) 

    - 데이터를 조작할 수 있는 구문

     - 조회, 입력 , 수정 , 삭제 

   

3. DCL(Data Control Language)

    - 데이터를 제어할 수 있는 구문

    - 권한, 트랜잭션 , ... 

    

MySQL

- 참조 사이트 : dev.mysql.com


[설치]


1. 데몬(서버 프로그램) : mysql-server

yum -y install mysql-server.i686

2. 클라이언트 프로그램 : mysql



mysql 서버 접속


mysql -h [localhost] -u root  //리눅스의root계정과 관계 x

이런식으로 뜨면 mysql 서버에 접속한 것이다. 

//이땐 리눅스 명령어 통하지 않음.                                                              

[패스워드 설정]


mysqladmin -u root  password 패스워드


mysql -u root -p   // 그다음 패스워드 입력창이 뜬다.


[간단한 명령어]


service mysqld start   //mysql 실행



[DDL]


show   [프로그램 이름] ;       // 보여준다.


drop database [DB이름];    //삭제



test파일이 사라져 있다.



create database [DB이름];    //생성


youngwook이 생성 되어 있다.



use [DB이름];    //들어가기 (화면상에 안뜨므로 기억해야함)


show tables;  //테이블 확인 (아직 만들지 않아 내용이 없음)




[테이블 생성 및 삭제 ]

-데이터의 구조를 정의


정형화된 데이터 : 사용자 정보 

    - no -> 식별번호 -> int

    - 아이디   -> varchar

    - 패스워드  -> hash -> 고정길이 -> char


CREATE TABLE 테이블 이름  ( 컬럼 이름 컬럼 속성들 , 컬럼 이름 컬럼 속성들  , ...)


CREATE TABLE user_info( id varchar(10), pw char(50) );


만든 테이블 안을 보려면

DESC 이름;


DROP TABLE 테이블 이름;    //테이블 삭제(데이터가 존재해도 바로 삭제됨



Key값과 Extra 값을 준 상태.



[DML]



[입력] : insert

 -  INSERT INTO 테이블 이름(컬럼이름, ...) VALUE(값1,...);

 

 - INSERT INTO user_info VALUE('user1',md5('1234'));

// 오류가 난다. 테이블의 갯수와 설정 갯수가 같지 않기 때문에



-INSERT INTO user_info(id,pw) VALUE('user1',md5('1234'));

따라서 이렇게 컬럼을 지정해줘 오류가 나지 않게 설정 한다.



[조회/검색] : select    //출력도 가능


- SELECT 컬럼, ...FROM 테이블 이름;


- SELECT no, id ,pw FROM user_info;



연산이 가능하다.         //printf 같은 역할도 한다.



SELECT 컬럼, ...FROM 테이블 이름 WHERE 조건

= ( 같다 표시 ==를 쓰지 않는다)

<> ( 같지 않다 !=와 같은 뜻)

SELECT * FROM user_info WHERE id='user1'; 


 

[수정] : update


UPDATE 테이블 이름 SET 할당 리스트;

UPDATE 테이블 이름 SET 할당 리스트 WHERE 조건;


UPDATE user_info SET id='quest';


UPDATE user_info SET id='user1' WHERE no=1;




[삭제] : delete


DELETE FROM 테이블 이름 WHERE 조건; 


DELETE FROM user_info WHERE no=1;





PHP 로 mysql에 연결



PHP mysql 다운

   - yum -y install php-mysql.i686




$link : 여러개의 DB를 연결할 때 사용







DB 쿼리 -> PHP( mysql_query() )


1. 입력 , 수정 , 삭제

    - 쿼리가 제대로 실행 되었는가?

  

<?php


// connect to mysql database


// mysql> -h localhost -u root -p;


$link = mysql_connect( 'localhost','root','1234');

if ( $link === False ) {

 // die("mysql connect error: " . mysql_error());

   exit();

}


//db select

//mysql > use user;


$ret = mysql_select_db('youngwook',$link);

if ($ret === False) {

 //die("mysql db select error: " . mysql_error() );

  exit();

}


if (!isset($_REQUEST[id] ) || !isset($_REQUEST[pw] ) || $_REQUEST[id] ===''|| $_REQUEST[pw] === '') {


        //echo "<script> alert('input id and password'); </script>";


?>


<form method=POST action=db.php>

 <input type=text name=id placeholder='user name'  >

 <br>

 <input type=password name=pw placeholder='password here'>

 <input type=submit value='join'>

</form>


<?php

} else{

  $id = $_POST[id];

  $pw = $_POST[pw];

  $query = "INSERT INTO user_info(id,pw) VALUES( '$id', md5('$pw'))";

  $ret= mysql_query($query);

  if(!$ret) {

        die('mysql INSERT ERROR: '.mysql_error() );


 }

}


?>






값을 입력하면


아래와 같이 db테이블 안에 저장 된다.



2. 조회

 - 조건에 맞는 조회된 데이터가 있는가?

 - 조건에 맞는 조회된 데이터가 없는가?




mysql_num_rows()        // id의 갯수가몇개인지 확인


$id = $_POST[id];

  $pw = $_POST[pw];


  $query = "SELECT * FROM user_info WHERE id='$id'";

  $resource = mysql_query($query);

  if( $resource) {

        $cnt = mysql_num_rows($resource);

        echo "number of rows: " .$cnt;





mysql_fetch_row()        //배열 형태로 내용을 보여줌

//row 대신 array라 사용해도 무방


$id = $_POST[id];

  $pw = $_POST[pw];


  $query = "SELECT * FROM user_info WHERE id='$id'";

  $resource = mysql_query($query);

  if( $resource) {

       $row = mysql_fetch_row($resource);

        print_r($row);





MYSQL_BOTH        // 테이블 열의 이름을 보여준다?


        $row = mysql_fetch_row($resource,MYSQL_BOTH);


       print_r($row);




현재  한 줄만 출력이 되고 있다. 전부 출력 하고 싶으면 수 만큼 $row = mysql_fetch_row($resource,MYSQL_BOTH);


       print_r($row); 이 문을 계속 수행 해주면 된다


ex) number of rows : 3    //반복문 사용해도 된다.

$row = mysql_fetch_row($resource,MYSQL_BOTH);


       print_r($row);

$row = mysql_fetch_row($resource,MYSQL_BOTH);


       print_r($row);


$row = mysql_fetch_row($resource,MYSQL_BOTH);


       print_r($row);



for문을 사용했을 때


for($i=$cnt; $i > 0; $i--){

        $row = mysql_fetch_array($resource,MYSQL_BOTH);

        print_r($row);

        print_r("<br>");

        }










[실습]


-이미 존재하는 사용자라면 입력받은 값으로 새로 업데이트 할 수 있도록 수정




[소스]



$query = "INSERT INTO user_info(id,pw) VALUE('$id',md5('$pw'))";
   if($cnt === 0){

        $result = mysql_query($query);}



   $query = "UPDATE user_info SET pw=md5('$pw') WHERE id='$id'";
   if($cnt > 0) {

    $ret = mysql_query($query); }






'Web Security' 카테고리의 다른 글

웹(WWW)  (3) 2019.03.13
Cookie와 session  (0) 2018.02.26
데이터 전달  (0) 2018.02.20
CGI(PHP)  (0) 2018.02.19
키입력 받아서 화면에 출력  (0) 2018.02.14

+ Recent posts