1. 시나리오
1) 먼저 메인페이지의 header에서 로그인을 성공하면 마이페이지가 보이도록 설정( 로그인을 하지 않았을 경우 미노출)
2) 클릭 시 마이페이지로 이동하고 id, name값은 고정! 수정불가능하도록 설정
3) 비밀번호를 입력하고 해당 비밀번호를 확인하는 기능까지만 만듦(보안 취약점)
> 기존비밀번호를 확인할 수 있도록 추후 수정 예정
4) 수정이 완료되면 완료 메시지 출력되고 메인페이지로 되돌아가도록 함!
2. 메인페이지의 [header.php]
- 가독성을 위해 변경 코드만 업로드!
변경 : <li><a href="mypage.php">마이페이지</a></li> 추가하여 mypage.php로 접속할 수 있도록 함.
<?php <!-- 비회원/회원 메뉴 다르게 -->
}else if($userid){
$logged = $username."(".$userid.")";
?>
<ul class="nav navbar-nav navbar-right">
<li><a href="main.php">문의하기</a></li> <!-- 문의게시판 12.22 회원용 -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button"
aria-haspopup="true" aria-expanded="false"><b><?=$logged ?></b>님의 회원관리<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="logout.php">로그아웃</a></li>
<li><a href="mypage.php">마이페이지</a></li>
</ul>
</li>
</ul>
<?php }?>
3. 마이페이지 [mypage.php]
- 먼저, 해당 페이지의 경우 회원가입페이지를 약간 수정하여 작성
- DB에서 정보를 가지고 와서 입력되도록 하고 id와 PW는 고정되어 수정하지 못하도록 작성
포인트: DB에서 데이터를 불러와서 각 각의 입력값에 넣어주고 (value="<?=$userid?> ") 수정 불가능한 부분들은(disabled)
- 수정 버턴을 눌렀을 때 Post 방식으로 mypage_update.php로 이동되도록 함
<form name="join" method="post" action="mypage_update.php">
<h3 style="text-align: center">회원정보</h3>
<div class="col-lg-4"></div>
<div class="form-group">
<input type="id" class="form-control" name="id" maxlength="15" value="<?=$userid?> " disabled>
</div>
<div class="form-group">
<input type="password" class="form-control" placeholder="비밀번호" name="pass" id="pass" maxlength="20">
</div>
<div class="form-group">
<input type="password" class="form-control" placeholder="비밀번호 확인" name="pass_confirm" id="pass_confirm" maxlength="20">
</div>
<div class="form-group">
<span id="pass_check_msg" data-check="0"></span>
</div>
<div class="form-group">
<input type="name" class="form-control" maxlength="20" name="name" id="name" value="<?=$username?> " disabled>
</div>
<div class="form-group" style="text-align: center">
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary active">
<input type="radio" name="gender" id="gender1" autocomplete="off" value="남자" checked>남자
</label>
<label class="btn btn-primary">
<input type="radio" name="gender" id="gender2" autocomplete="off" value="여자">여자
</label>
</div>
</div>
<div class="form-group">
<input type="tel" class="form-control" value="<?=$phone?> " name="phone" id="phone" maxlength="20">
</div>
<div class="col-lg-4"></div>
<div class="form-group">
<input type="email" class="form-control" value="<?=$email?>" name="email" id="email" maxlength="80">
</div>
<span class="btn btn-primary form-control" onclick="check_input()">수정</span>
<span class="btn btn-primary form-control" onclick="reset_form()">초기화</span>
</form>
</div>
</div>
</div>
3. 마이페이지 수정 [mypage_update.php]
- 해당 페이지는 간단하다.(include)를 를 많이 사용하고 있습니다. ㅎㅎㅎㅎㅎㅎㅎ
- 해당 페이지의 경우 회원가입 시 DB로 보내지는 페이지에서 아래와 같이 수정하였습니다.
포인트 : SQL쿼리가 insert에서 update로 변경되었고 SET이 따라온다는 점
그리고 기준은 WHERE id값을 찾아 해당 아이디의 값을 변경!
<?php
include_once "./db/db_con.php";
include './config.php';
$pass = $_POST['pass'];
$gender = $_POST['gender'];
$phone = $_POST['phone'];
$email = $_POST['email'];
mq("UPDATE user_info SET pass='$pass', gender='$gender', phone='$phone', email='$email' WHERE id='$userid' ");
echo "
<script>
alert('회원정보가 수정되었습니다.');
location.href = 'index.php';
</script>
";
?>
CSRF 취약점 연구를 위해 개발 마이페이지를 개발해 보았습니다.
'소소한 IT이야기 > PHP_개발' 카테고리의 다른 글
[M2 MAMP] PHP 게시판 구축 - 07 (feat. 파일 업로드 구현) (0) | 2023.08.12 |
---|---|
[M2 MAMP] PHP 게시판 구축 - 06 (feat. 리스트 검색, 페이징) (0) | 2023.08.12 |
[M2 MAMP] PHP 게시판 구축 - 05 (feat.수정(U)/삭제(D)) (0) | 2023.08.12 |