웹해킹의 기초를 탄탄히 하기 위해 개발부터 시작. 사실 전과하고 바로 보안을 접했기 때문에 개발을 해본적이 없다. 재밋겠다 하하.
👆 완성되었을 때의 모습이다. 로그인 버튼을 누를 시 로그인 성공 페이지로 리다이렉트 시킬 예정이다.
내가 짠 코드는 크케 세 가지의 파일로 이루어진다.
1. 로그인 페이지를 보여주는 html 파일
2. 로그인 버튼이 눌렸을 때 서버측 로직을 처리 해주는 php파일
3. 로그인 성공 페이지를 보여주는 php파일
먼저, 코딩 전에 사용할 DB를 만들어 놓고 가자. 회원가입은 다음 시간에 구현할 것이므로 미리 DB에 데이터를 넣어놨다.
mysql> CREATE DATABASE login;
mysql> USE login;
mysql> CREATE table login_tb( -> id INT(11) NOT NULL AUTO_INCREMENT,
-> username VARCHAR(20) NOT NULL, -> password VARCHAR(20) NOT NULL, -> PRIMARY KEY(id) -> );
mysql> INSERT INTO login_tb (username, password) VALUES ('test', 'test');
대문자 사용에 유의하자..
데이터가 올바르게 들어갔다.
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf8">
<title>로그인</title>
</head>
<body>
<h2>로그인</h2>
<form action="login.php" method="post">
<label for="username">아이디</label><br>
<input type="text" id="username" name="username"><br><br>
<label for="password">비밀번호</label><br>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
label 태그는 UI의 라밸을 정의할 때 사용되며 for속성이랑 사용한다. 다른 요소의 id값이랑 label 태그의 for 값은 일치할 경우 결합이 가능하다.
input태그의 type값에 따라 형태가 달라지며 name 값이 Form으로 서버측에 전송될 때 key값으로 넘어간다.
login.php
<?php
$host = "localhost";
$user = "root";
$pw = "";
$dbname = "login";
$conn = new mysqli($host, $user, $pw, $dbname);
if ($conn->connect_error) {
die("Failed: " . $conn->connect_error);
} else {
echo "Connected";
}
if (getenv("REQUEST_METHOD") == "POST") {
$username = $_POST["username"];
$password = $_POST["password"];
$sql = "SELECT * FROM login_tb WHERE username = '$username' and password = '$password'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$_SESSION["username"] = $username;
echo "<script>alert('로그인 성공'); location.replace('./login_success.php');</script>";
} else {
$error = "아이디 또는 비밀번호가 잘 못 되었습니다.";
}
}
- DB 연결을 확인한다.
- 서버측 POST 요청을 확인하고 각 key값들을 파싱한다.
- 데이터를 조회한다.
- 조회된 데이터가 있을 경우 로그인 성공 페이지로 리다이렉트 된다.
- username을 세션변수에 username으로 저장한다. (세션 변수는 session_start() 전에 할당은 가능하지만 사용은 못한다! session_start()가 수행되어야 사용이 가능하다.)
login_success.php
<?php
$host = "localhost";
$user = "root";
$pw = "";
$dbname = "login";
$conn = new mysqli($host, $user, $pw, $dbname);
session_start();
if (isset($_SESSION["usernameeee"])) {
echo "환영합니다 " . $_SESSION["username"] . "님";
}
username을 출력한다.
SQLI 실습
or 1=1을 이용해 쿼리문을 참으로 만들고 뒤에 값을 주석처리 해줬다.
sqli이 올바르게 수행됐다.
'Web' 카테고리의 다른 글
[Web] php, mysql을 활용한 게시판 글 수정 및 좋아요 구현 / 웹개발-8 (0) | 2024.02.29 |
---|---|
[Web] php, mysql을 활용한 게시판 글 작성 구현 / 웹개발-7 (2) | 2024.02.24 |
[Web] php, mysql을 활용한 주소 검색 구현 / 웹개발-6 (0) | 2024.02.20 |
[Web] php, mysql을 활용한 회원정보 수정 구현 / 웹개발-4 (0) | 2024.02.16 |
[Web] php, mysql을 활용한 회원가입 구현 / 웹개발-2 (0) | 2024.02.02 |