agencies

[프로젝트] 홈페이지 구축 (로그인 설정) v0.8 본문

Ⅲ. 정보보안

[프로젝트] 홈페이지 구축 (로그인 설정) v0.8

agencies 2024. 3. 2. 17:00

 

소스코드

index.php

<?php
include "../../nav.html";



?>



<section>
<div class="s1">
<p class="top">소식ㆍ정보 > 정보게시판</p>
<p class="name">정보게시판</p>





<div style="text-align:center;padding-top:250px;">
<form action="login.php" method="post">
<label><h3>ID : <input type="text" name="username" required style="height:30px;padding-left:5px;"></h3></label><br>
<label><h3 style="margin-left:-10px;">PW : <input type="password" name="password" required style="height:30px;padding-left:5px;"></h3></label><br>
<input type="submit" value="Login" style="background-color:white;padding:15px;">
</form>
</div>





</div>
</section>






<style>
/* section 1 */
.s1{width:1050px; height:600px;background-color:white; margin:0 auto;}
.top{text-align:center; padding:50px; z-index:0; position:relative; color:gray; font-size:13px;}
.name{text-align:center; font-size:40px; font-weight:bold; color:#0351c5;}
</style>

 

 

 

 

login.php

<?php



$connect = mysqli_connect("localhost", "root", "apmsetup", "board");

$table = "create table if not exists info_board(
	id int auto_increment primary key,
	user varchar(20) not null,
	title varchar(30) not null,
	comment text not null,
	date date)";


$table2 = "create table if not exists user(
	id int auto_increment primary key,
	user varchar(20),
	pass varchar(20),
	date date)";


if ($connect){
mysqli_query($connect, $table);
mysqli_query($connect, $table2);


}











$user = $_POST['username'];
$pass = $_POST['password'];
$date = date("Y-m-d");


if(!preg_match('/^[a-zA-Z0-9]+$/', $user))
{
	echo"<script>alert('아이디는 알파벳과 숫자만 입력이 가능합니다.');history.back();</script>";
	exit;
}



if($user !="" && $pass !="")
{
	$sql = "select * from user where user='$user'";
	$r = $connect->query($sql);
	if($r->num_rows>0)
	{
		$exists = "select * from user where user='$user' and pass='$pass'";
		$res = $connect->query($exists);
		if($res->num_rows>0)
		{
			echo "로그인 성공";
		}
		else{
		echo "<script>alert('입력한 비밀번호가 다릅니다');history.back()</script>";}
	}
	else{
		$sql = "insert into user (user,pass,date) values('$user','$pass','$date')";
		mysqli_query($connect, $sql);
		echo "<script>alert('$user 로 새로운 계정이 생성되었습니다.');location.href='index.php';</script>";
	}
}

?>

 

 

1. info_board 테이블이 있는지 확인 후 없다면 생성
2. user 테이블이 있는지 확인 후 없다면 생성

 

정상적으로 생성된 것을 확인할 수 있었습니다.

 

 

사용자 아이디에 정규표현식을 사용하여 알파벳과 숫자만 입력이 가능하도록 설정합니다.

 

^ : 문자열의 시작

+ : 앞의 패턴이 하나 이상 반복되어야 함

$ : 문자열의 끝

 

 

 

- 참고로 중복이 되어 보여지는 계정들은 테스트를 진행하면서, 이상한 동작이 되지 않도록

패치하였기에 ... 이미 저장된 정보들만 보여지게 됩니다.

 

 

 

 

 

 

* user가 있다면? 패스워드도 일치하는지 확인 후 로그인 성공 여부 판단

 

 

* 만약 user가 있는데 패스워드가 틀린다면 비밀번호가 틀렸습니다 메시지 출력

 

 

 

* 만약 입력한 user가 없다면 입력한 user와 pass로 계정 생성

 

* 입력한 user부분에 공백이나 특수문자가 들어간다면 계정 생성 불가 메시지 출력