Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 모의해킹
- css
- 쿠키
- Los
- XSS
- cors
- Cross Site Request Forgery
- 로그인
- Reflected Xss
- file upload
- cookie 탈취
- csrf
- Error based sql injection
- MySQL
- 과제
- blind sql injection
- 로그인페이지
- sql injection point
- union sql injection
- sql injection
- php
- JWT
- 게시판 만들기
- Python
- CTF
- 세션
- lord of sqli
- 웹개발
- lord of sql injection
- JS
Archives
- Today
- Total
Almon Dev
모의해킹 공부 정리 12일차 (중복확인) 본문
중복확인
users.txt로 회원가입 페이지를 구현할 때 만들어둔 아이디, 닉네임 중복확인을 mysql을 이용하도록 수정했습니다
아이디 중복확인
check_userId.php
수정 전
<?php
$id = json_decode(file_get_contents("php://input"), true)['id'] ?? null;
// echo "$id";
$users = fopen($_SERVER["DOCUMENT_ROOT"]."/storage/users.txt", 'r');
$duplication = false;
while($user = fgets($users)) {
$user_id = explode(":", $user)[0];
if($user_id == $id) {
$duplication = true;
}
}
fclose($users);
header("Content-Type: apllication/json");
echo json_encode(['pass' => !$duplication]);
?>
수정 후
<?php
include($_SERVER["DOCUMENT_ROOT"]."/mysql.php");
$id = json_decode(file_get_contents("php://input"), true)['id'] ?? null;
// echo "$id";
$sql = "select id from users where id='$id';";
$result = runSQL($sql);
$duplication = false;
if ($result->num_rows > 0) {
$duplication = true;
}
header("Content-Type: apllication/json");
echo json_encode(['pass' => !$duplication]);
?>
duplicate_check.js
idInput.addEventListener('input', () => {
const userId = idInput.value;
fetch('/api/users/check_userId.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=utf-8',
},
body: JSON.stringify({
id: userId,
}),
})
// .then((res) => res.text())
.then((resJson) => resJson.json())
.then((res) => {
console.log(res);
if (!res.pass) {
// console.log(res.pass);
idInput.classList.add(className);
} else {
// console.log(res.pass);
idInput.classList.remove(className);
}
});
});
아이디 확인을 db를 통해 하는 것으로 바꾸었습니다.
js파일은 수정할 부분이 없었습니다.
include의 경우 상대경로(../mysql.php)를 이용하여고 하였으나
계속해서 에러가 나서 절대경로로 변경했습니다. $_SERVER 환경변수에 DOCUMENT_ROOT에는
웹 루트의 경로가 들어있습니다.
닉네임 중복확인
check_userNick.php
수정 전
<?php
$nickname = json_decode(file_get_contents("php://input"), true)['nick'] ?? null;
$users = fopen($_SERVER["DOCUMENT_ROOT"]."/storage/users.txt", 'r');
$duplication = false;
while($user = fgets($users)) {
$user_nick = trim(explode(":", $user)[2]);
// echo "$user_nick";
if($user_nick == $nickname) {
$duplication = true;
}
}
fclose($users);
header("Content-Type: apllication/json");
echo json_encode(['pass' => !$duplication]);
?>
수정 후
<?php
include($_SERVER['DOCUMENT_ROOT']."/mysql.php");
$nickname = json_decode(file_get_contents("php://input"), true)['nick'] ?? null;
$duplication = false;
$sql = "select nickname from users where nickname='$nickname'";
$result = runSQL($sql);
if ($result->num_rows > 0) {
$duplication = true;
}
header("Content-Type: apllication/json");
echo json_encode(['pass' => !$duplication]);
?>
duplicate_check.js
nickInput.addEventListener('input', () => {
const userNick = nickInput.value;
fetch('/api/users/check_userNick.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=utf-8',
},
body: JSON.stringify({
nick: userNick,
}),
})
// .then((resText) => resText.text())
.then((resJson) => resJson.json())
.then((res) => {
if (!res.pass) {
// console.log(res.pass);
// console.log(res.nickname);
// console.log(res);
nickInput.classList.add(className);
} else {
// console.log(res.pass);
nickInput.classList.remove(className);
}
});
});
역시나 db를 활용하도록 변경 외에는 수정한 부분이 없습니다.
비밀번호 중복확인
check_passwd.php
<?php
$res = json_decode(file_get_contents("php://input"), true);
$passwd = $res['pass'];
$passwdCheck = $res['passCheck'];
$duplication = false;
if($passwd == $passwdCheck) {
$duplication = true;
}
header("Content-Type: apllication/json");
echo json_encode(['pass' => $duplication]);
?>
duplicate_check.js
수정 전
passCheckInput.addEventListener('input', () => {
const passwd = passInput.value;
const passwdCheck = passCheckInput.value;
if (passwd === passwdCheck) {
passCheckInput.classList.remove(className);
} else {
passCheckInput.classList.add(className);
}
});
수정 후
passCheckInput.addEventListener('input', () => {
const passwd = passInput.value;
const passwdCheck = passCheckInput.value;
if (passwd === passwdCheck) {
passInput.classList.remove(className);
passCheckInput.classList.remove(className);
} else {
passInput.classList.add(className);
passCheckInput.classList.add(className);
}
});
passInput.addEventListener('blur', () => {
const passwd = passInput.value;
const passwdCheck = passCheckInput.value;
if (passwd === passwdCheck) {
passInput.classList.remove(className);
passCheckInput.classList.remove(className);
} else {
passInput.classList.add(className);
passCheckInput.classList.add(className);
}
});
비밀번호 확인은 유저가 입력한 값끼리의 검증이기 때문에 db를 사용할 필요가 없었습니다.
passInput.addEventListener('blur', () => {
다만 비밀번호 확인창을 입력하여 이미 중복검사를 마친 후 비밀번호 입력창을 수정했을 때
중복검사가 진행되지 않아서 비밀번호 입력창에 blur이벤트가 발생했을 때 다시 한번 검사를 하도록 변경했습니다.
blur 이벤트는 포커스(focus)가 사라졌을 때 발생합니다.
ex) 입력창에 입력을 끝내고 다른 곳으로 이동할 때
'모의해킹 > 웹 개발' 카테고리의 다른 글
세션으로 로그인 구현하기(모의해킹 공부) (0) | 2024.11.01 |
---|---|
쿠키로 로그인 구현하기 (모의해킹 공부) (0) | 2024.10.31 |
모의해킹 공부 정리 10일차 (마이페이지) (2) | 2024.10.26 |
모의해킹 공부 정리 9일차 (로그아웃) (0) | 2024.10.25 |
모의해킹 공부 정리 8일차 (과제) (1) | 2024.10.24 |