일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- CTF
- 수학
- Web Hacking
- 문자열
- 구현
- Digital Forensics
- php
- MySQL
- SuNiNaTas
- Network
- 백준
- 써니나타스
- 정렬
- HackCTF
- 그리디 알고리즘
- 사칙연산
- Text
- Incognito
- C
- wargame
- cryptography
- Forensics
- 인코그니토
- xcz.kr
- misc
- N0Named
- Database
- Web
- writeup
- Python
- Today
- Total
보안을 그리다, 훈이
[Web Hacking / PHP & MySQL] 게시판 구현 - write.php / write_action.php 본문
[Web Hacking / PHP & MySQL] 게시판 구현 - write.php / write_action.php
HooNeee 2021. 4. 28. 21:54이번에는 게시판의 존재 목적인 CRUD 중 필자가 가장 중요하다고 생각하는 Create에 대해 다뤄볼 것이다. (물론 Read도 중요하다ㅎㅎ)
글을 작성하기 위한 form인 write.php를 구현한 후, 작성한 글을 게시판에 업로드하는 action을 취해줄 write_action.php도 구현하였다.
[write.php 소스코드]
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<style>
table.table2 {
border-collapse: separate;
border-spacing: 1px;
text-align: left;
line-height: 1.5;
border-top: 1px solid #ccc;
margin: 20px 10px;
}
table.table2 tr {
width: 50px;
padding: 10px;
font-weight: bold;
vertical-align: top;
border-bottom: 1px solid #ccc;
}
table.table2 td {
width: 100px;
padding: 10px;
vertical-align: top;
border-bottom: 1px solid #ccc;
}
</style>
</head>
<body>
<form method="post" action="write_action.php">
<!-- method : POST!!! (GET X) -->
<table style="padding-top:50px" align=center width=auto border=0 cellpadding=2>
<tr>
<td style="height:40; float:center; background-color:#3C3C3C">
<p style="font-size:25px; text-align:center; color:white; margin-top:15px; margin-bottom:15px"><b>게시글 작성하기</b></p>
</td>
</tr>
<tr>
<td bgcolor=white>
<table class="table2">
<tr>
<td>작성자</td>
<td><input type="text" name="name" size=30></td>
</tr>
<tr>
<td>제목</td>
<td><input type="text" name="title" size=70></td>
</tr>
<tr>
<td>내용</td>
<td><textarea name="content" cols=75 rows=15></textarea></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="pw" size=15 maxlength=15></td>
</tr>
</table>
<center>
<input style="height:26px; width:47px; font-size:16px;" type="submit" value="작성">
</center>
</td>
</tr>
</table>
</form>
</body>
</html>
write.php는 index.php의 [글쓰기] 버튼을 통해 불러오며, write.php에는 작성자, 제목, 내용, 비밀번호를 입력할 수 있다.
보안상 중요한 글쓰기 기능이므로 method는 GET 방식이 아닌 POST 방식을 사용한다.
[write.php 결과]
[write_action.php 소스코드]
<?php
$connect = mysqli_connect("127.0.0.1", "root", "password", "db_board") or die("fail");
$id = $_POST['name']; //Writer
$pw = $_POST['pw']; //Password
$title = $_POST['title']; //Title
$content = $_POST['content']; //Content
$date = date('Y-m-d H:i:s'); //Date
$URL = './index.php'; //return URL
$query = "INSERT INTO board (number, title, content, date, hit, id, password)
values(null,'$title', '$content', '$date', 0, '$id', '$pw')";
$result = $connect->query($query);
if ($result) {
?> <script>
alert("<?php echo "게시글이 등록되었습니다." ?>");
location.replace("<?php echo $URL ?>");
</script>
<?php
} else {
echo "게시글 등록에 실패하였습니다.";
}
mysqli_close($connect);
?>
write_action.php 또한 마찬가지로 POST 방식으로 값을 제공받아 게시판에 글을 등록한다.
[write_action.php 결과]
[DB 조회 결과]
SELECT문으로 board 테이블을 조회해본 결과, 게시글이 정상적으로 DB에 입력된 것을 확인할 수 있다 :)
password 속성에 1234가 그대로 출력되는 것과 같이 password가 평문으로 DB에 저장되는 시스템은 매우 취약하므로 실제 서비스에서 사용하면 큰일난다!
추후 시큐어코딩을 통해 보완할 예정이다.
+ 필자는 개발 및 보안 공부를 목적으로 하기에 취약점 보완을 추후에 진행할 예정이지만, 실제 서비스를 목적으로 개발하는 소프트웨어는 KISA에서 발간하는 '소프트웨어 개발 보안 가이드'를 참고하여 개발 초기부터 보안을 고려해야만 한다.
'Programming > PHP & MySQL' 카테고리의 다른 글
[Web Hacking / PHP & MySQL] 게시판 구현 - login.php / login_action.php (0) | 2021.05.02 |
---|---|
[Web Hacking / PHP & MySQL] 게시판 구현 - read.php (0) | 2021.04.29 |
[Web Hacking / PHP & MySQL] 게시판 구현 - index.php (2) | 2021.04.28 |
[Web Hacking / PHP & MySQL] 게시판 구현 - 개요 (1) | 2021.04.28 |
[PHP & MySQL] MySQLi(MySQL Improved Extension) 함수 (0) | 2021.03.30 |