'게시글 injection'에 해당되는 글 1건
- 2015.05.07 [09] php 게시판 생성, 비정상적으로 게시글 입력, 게시판 출력
- 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 |