일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Reflected Xss
- union sql injection
- 로그인
- blind sql injection
- lord of sql injection
- SQLi
- sql injection point
- CTF
- brute force
- Python
- MySQL
- Cross Site Request Forgery
- 웹개발
- Los
- cookie 탈취
- 로그인페이지
- 모의해킹
- JS
- 게시판 만들기
- Error based sql injection
- XSS
- sql injection
- lord of sqli
- css
- php
- csrf
- cors
- 세션
- JWT
- 쿠키
- Today
- Total
Almon Dev
모의해킹 공부 정리 2일차 (과제) 본문
과제는 끝냈다고 생각했으나 만들고 보니 추가할 점이 많이 보였습니다.
오늘 추가한 점은 id : admin passwd : admin1234를 if문으로 하드코딩 하는 게 아니라
users.txt라는 파일에 저장한 뒤 해당 파일을 읽어와서 로그인하는 과정을 추가했습니다.
users.txt
admin:admin1234:Almond Dev
test:test1234:tester
' : '을 이용해서 문자열을 스플릿 하기 위해서 id:passwd:nickname으로 저장했습니다.
login_proc2.php
<?php
$id = $_POST["id"];
$pass = $_POST["passwd"];
$url = '/login_successful.php';
$users = fopen($_SERVER['DOCUMENT_ROOT']."/storage/users.txt", 'r');
if ($users) {
while($user = fgets($users)) {
// echo "$user <br> ";
$user_split = explode(":", $user);
// printf("id: %s pass: %s nickname: %s <br>", ...$user_split);
if($user_split[0] == $id && $user_split[1] == $pass) {
$nickname = $user_split[2];
fclose($users);
echo "<form id='redirection-form' action='$url' method='post'>";
echo "<input type='hidden' name='nickname' value='$nickname'>";
echo "</form>";
echo "<script>document.getElementById('redirection-form').submit()</script>";
}
}
fclose($users);
header('Location: login2.php?result=failed');
}else {
echo "파일이 없음";
}
// if ($id == "admin" && $pass == "admin1234") {
// header('Location: login_successful.php');
// }else {
// header('Location: login2.php?result=failed');
// }
?>
fopen을 이용해 users.txt 파일을 읽기 모드로 $users에 저장합니다.
$users = fopen($_SERVER['DOCUMENT_ROOT']."/storage/users.txt", 'r');
$user = fgets($users)를 while문으로 반복합니다.
fgets는 파일을 한 줄씩 읽어오며 파일의 끝에 도달하면 false를 반환하므로 반복문이 알아서 종료됩니다.
if ($users) {
while($user = fgets($users)) {
이후에 explod함수를 이용해 ':'을 기준으로 스플릿 해서 아이디와 비밀번호를 if문으로 검사합니다.
$user_split = explode(":", $user);
if($user_split[0] == $id && $user_split[1] == $pass) {
$nickname에 해당 아이디의 닉네임을 저장하고 $users파일을 종료합니다.
$nickname = $user_split[2];
fclose($users);
form과 hidden타입의 input태그로 $nickname을 post로 전송합니다
header('Location:...')을 이용한 리다이렉션은 GET메서드가 기본이라 다른 방식을 사용했습니다
echo "<form id='redirection-form' action='$url' method='post'>";
echo "<input type='hidden' name='nickname' value='$nickname'>";
echo "</form>";
echo "<script>document.getElementById('redirection-form').submit()</script>";
일치하는 아이디와 비밀번호가 없이 while문이 종료되면
fclose($users)로 파일을 종료하고, header('Location...')로 리다이렉션 합니다.
fclose($users);
header('Location: login2.php?result=failed');
간단해 보였는데 생각보다 오랜 시간이 걸렸습니다.
DB를 사용하는 게 더 좋지만 DB 없이 파일로도 한 번쯤 해보고 싶었는데 이번 기회에 해보네요
다음에 추가해 볼 것은 회원가입으로 생각하고 있습니다.
'모의해킹 > 웹 개발' 카테고리의 다른 글
모의해킹 공부 정리 4,5,6 일차 (mysql 설정) (3) | 2024.10.22 |
---|---|
모의해킹 공부 정리 3일차 (회원가입 페이지) (0) | 2024.10.19 |
모의해킹 공부 정리 2일차 (과제) (5) | 2024.10.18 |
모의해킹 공부 정리 1일차(과제) (2) | 2024.10.17 |
모의해킹 공부 정리 1일차 ( 웹서버 ) (0) | 2024.10.17 |