- 2015.03.19
Remark)
1) Client    --     Server  <-->  WebApplication
2) 웹 페이지가 없어도 get방식, post방식 등으로 정보를 전달하여 Server에서 처리할 수 있게 할 수 있다.
오늘은 php를 이용한 게시판 만들기 실습
1. mysql 셋팅
# mysql -u root -p
mysql> create database bbs;
1) 테이블 생성
num int
name varchar(20)
subject varchar(50)
body text
mysql> use bbs;
mysql> create table board( num int NOT NULL auto_increment, name varchar(20), subject varchar(50), body text, primary key(num) );           # num 부분은 입력하지 않아도 자동으로 올라간다.
mysql> desc board;
mysql> insert into board(name, subject, body ) values( 'admin', 'test', 'testing' );
mysql> select * from board;
2) 게시판 페이지 작성 (write.php)
[ write.php ]
<html>
<head>
</head>
<body>
        <form method=post action=write_ok.php>
        <table width=400 border=0 bgcolor=#c0c0c0>
                <tr>
                        <td width=60 align=left> name </td>
                        <td align=left>
                                <input type=text name=name size=20>
                        </td>
                </tr>
                <tr>
                        <td width=60 align=left> subject </td>
                        <td align=left>
                                <input type=text name=subject size=50>
                        </td>
                </tr>
                <tr>
                        <td width=60 align=left> body </td>
                        <td align=left>
                                <textarea name=body cols=52 row=100></textarea>
                        </td>
                </tr>
                <tr>
                        <td colspan=10 align=right>
                                <input type=submit value="write">
                        </td>
                </tr>
        </table>
        </form>
</body>
</html>
3) write_ok.php
- mysql_affected_rows()
=> 최근에 실행 된 쿼리의 변경 행 개수를 얻어옴
[ write_ok.php ]
<?
  $DB = mysql_connect( 'localhost', 'root', 'a' );
  mysql_select_db( 'bbs', $DB );
$sql = "INSERT INTO board( name, subject, body) VALUES( '$name', '$subject', '$body' )";
  $result = mysql_query( $sql );
  $count = mysql_affected_rows();
  if ( $count == 1 ) {
    echo "write done... ";
  }
  else {
    echo "write failed...";
}
?>
4) 비 정상적인 방법으로 mysql에 게시글 입력하기
* Get 방식
http://192.168.133.142/write_ok.php?name=attacker&subject=attack start&abody=<script> alert('xss'); </script>
=> mysql 에선 body 내용이 안보인다.?
* Post 방식
<form method=POST action=http://192.168.133.142/write_ok.php>
<input type=hidden name=name value=attack2>
<input type=hidden name=subject value=attack start>
<input type=hidden name=body value=sending post test>
<input type=submit value=send>
</form>
이 태그를 javascript를 통해 전달한다. 단 엔터가 없이 편집,,
javascript:document.write("<form method=POST action=http://192.168.133.142/write_ok.php><input type=hidden name=name value=attack2><input type=hidden name=subject value=attack start><input type=hidden name=body value=sending post test><input type=submit value=send></form>");
=> mysql에선 항목 별로 띄어쓰기 뒤쪽은 무시된 것으로 뜸...?
웹 브라우저 화면은 클라이언트에서 실행되고 있는 화면이므로
절대 서버에서 동작하는 코드가 아니다.
즉, 입력 폼 없이도 데이터 전송은 가능하다.
서버 웹 어플리케이션은 클라이언트로부터 전달받은 데이터를 처리
입력 폼은 사용자로부터 값을 입력받아 서버에 전달해 주기 위한 용도
입력 폼 없이도 얼마든지 서버로 데이터를 전달할 수 있음
5) 게시판 목록 및 게시글 확인 페이지
[ list.php ]
<?
  $DB = mysql_connect( 'localhost', 'root', 'a' );
  mysql_select_db( 'bbs', $DB );
  $sql = "select num, name, subject from board";
  $result = mysql_query( $sql );
#  $line = mysql_num_rows( $result );           # line 수 확인
#  echo $line;                                                 # 정상적으로 확인되는지 테스트용
?>
<html>
<head></head>
<style>
p { color: white; }
</style>
<body>
        <table width=600 border=0>
                <tr height=20 bgcolor=#5e5e5e>
                        <td width=35 align=center>
                                <p> num </p>
                        </td>
                        <td width=300 align=center>
                                <p> subject </p>
                        </td>
                        <td width=50 align=center>
                                <p> name </p>
                        </td>
                </tr>
<?
        while( $row = mysql_fetch_array( $result ) ) {
?>
                <tr>
                        <td height=20 align=center>
                                <?=$row[num]?>
                        </td>
                        <td heignt=20 align=center>
                                <a href="view.php?num=<?=$row[num]?>">  <?=$row[subject]?>
                        </td>
                        <td height=20 align=center>
                                <?=$row[name]?>
                        </td>
                </tr>
<?
        }
?>
        </table>
</body>
</html>
[ view.php ]
<?
  $DB = mysql_connect( 'localhost', 'root', 'a');
  mysql_select_db( 'bbs', $DB );
  $sql = "select * from board where num=$num";
  $result = mysql_query( $sql );
  $row = mysql_fetch_array( $result );
?>
<html>
<head></head>
<body>
        <table width=500 border=0>
                <tr height=20 bgcolor=#5e5e5e>
                        <td width=300 align=center>
                                <p><?=$row[subject]?></p>
                        </td>
                </tr>
                <tr height=20>
                        <td width=300 align=left>
                                <?=$row[body]?>
                        </td>
                </tr>
        </table>
</body>
</html>
 
'Study > 웹보안' 카테고리의 다른 글
| [11] XSS, webgoat, DOM XSS, AJAX Security (0) | 2015.05.13 | 
|---|---|
| [10] Paros, Proxy, url 파라미터 변조 (0) | 2015.05.13 | 
| [08] cookie 및 session 이용한 인증, SQL Injection, secure 코딩 (0) | 2015.05.07 | 
| [07] php 셋팅, mysql 연동, 계정 인증, Web 인증방식, cookie 이용 인증 및 logout (0) | 2015.05.07 | 
| [06] php 및 mysql 설치, 인증, SQL, get & post, http 헤더 (0) | 2015.05.07 | 
					