반응형 WEB HACKING56 Php로 웹 개발하기 : 게시판(12) - 파일 업로드 게시판의 주요 기능 중 Create 부분에 파일을 업로드하고 이를 확인할 수 있는 기능을 추가해보자. ① 파일 업로드 제목과 내용 밑에 input type을 file로 설정해서 파일 업로드 구역을 하나 넣어준다. 그런데, 이미지를 올리고 나중에 이를 가져오려면 내 로컬과 MySQL 중 어느 곳에 이미지를 저장하는 것이 좋을까 고민하다가 일단 내 로컬에 저장하기로 했다. 파일을 업로드할 때 이미지 주소를 생성하고, 그 주소를 사용해서 이미지를 불러오도록 하기 위해 일반적인 HTML 문서에서는 업로드된 파일이 어떻게 표시되는지 확인해보았다. 파일을 하나 업로드했는데 이미지는 뜨지 않고 파일명만 떴다. form에 enctype="multipart/form-data"를 추가하고 input name을 (file로.. 2021. 11. 30. Php로 웹 개발하기 : 게시판(11) - 좋아요 이번에는 게시판에 마음에 드는 글에 좋아요를 누르는 기능을 만들어 보자. 원래는 views가 높은 순서대로 글을 출력하려고 했는데 좋아요가 많은 글을 추천하는 방식도 괜찮을 것 같다. 그런데 좋아요 기능을 추가하려면 어떤 사용자가 어떤 글에 좋아요를 눌렀는지 기억해야 하므로 각 사용자가 각 게시글에 대한 테이블이 하나 더 필요하다. 근데 테이블을 하나 더 만들지 말고, 1과 0으로 이루어진 배열로 표현해보자. 우선 게시글이 최대 25개만 있다고 가정하고 좋아요 column을 추가해주고, 좋아요 횟수를 기록할 column도 추가하자. ALTER table board add column `likes` varchar(25) default '0000000000000000000000000'; ALTER table.. 2021. 11. 28. Php로 웹 개발하기 : 게시판(10) - 조회수 게시판에 조회수 기능을 추가해보자. 현재 게시판의 DB 테이블은 다음과 같은 형태를 가진다. 조회수에 해당하는 views를 default 값 0으로 넣어두었다. 조회수는 누군가 글을 클릭하면 올라간다. 누군가 글을 클릭하면, 해당 글의 id가 read.php의 파라미터로 넘어가고, read.php에서 해당 id를 가진 글을 불러온다. 따라서 read.php가 동작한다는 것은 누군가가 글을 클릭했다는 의미이므로, 해당 id를 가진 글을 불러온 후 해당 id의 views를 1 증가시키면, 조회수 기능이 구현되는 것이다. [read.php] $view_sql = "UPDATE board set views = views + 1 where id = {$id}"; mysqli_query($conn, $view_sq.. 2021. 11. 27. CSRF : Cross-Site Request Forgery 이번 포스팅에서는 CSRF의 개념에 대해 알아볼 것이다. CSRF 공격은 XSS 취약점을 활용하면 효과가 더 극대화되기 때문에 자주 연계되지만, 개념 측면에서는 둘은 서로 무관한 공격이다. ① CSRF란? CSRF는 이용자의 세션 정보를 가지고 이용자가 원치 않는 요청을 하게 만드는 공격이다. 사용자의 요청을 중간에 위조하는 것이 아니라, 사용자인 척을 하고 요청을 보내는 것이다. 흔한 오해(?) 중 하나로 XSS는 클라이언트 측 공격, CSRF는 서버 측 공격이라는 개념이 있는데 페이로드가 실행되는 곳에 차이가 있을 뿐, 둘 다 이용자를 공격하는 취약점이다. ② CSRF 발생원인 CSRF 취약점의 근본적인 원인은, 서버가 요청자를 구분하지 못하기 때문이다. 달리 말하면 요청을 하는 사용자에 인증 과정을.. 2021. 11. 26. XSS : Cross-Site Scripting 대응 방안 이번 포스팅에서는 XSS 공격에 대한 근본적인 대응 방안을 살펴보고, 알려진 몇 가지 방안에 대한 우회 방안을 살펴볼 것이다. ① XSS 대응방안 XSS 공격에 대한 가장 근본적인 대응 방안은, 사용자의 입력 값(Parameter)에서 HTML 특수 문자들을 HTML Entity로 바꾸는 것이다. 대표적으로 는 >로 표현할 수 있다. [HTML Entity] " " ' ' > ( ( ) ) 이때, 서버에 입력할 때 바꾸어주거나 vs 서버에서 출력할 때 바꾸어주는 두 가지 방법으로 나눌 수 있는데, 출력할 때 바꾸어주는 것이 Stored와 Reflected를 한 번에 방어할 수 있기 때문에 조금 더 안정적이다. ② 우회 방안 XSS 대응 방안을 검색하면 몇 가지 대응 방안을 볼 수 있는데, 위의 .. 2021. 11. 25. Php로 웹 개발하기 : 게시판(9) - Pagination 게시판의 CRUD는 모두 구현하였다. 이번 포스팅에서는 출력되는 데이터의 개수에 따른 pagination을 넣어볼 것이다. ① 데이터 개수 구하기 mysqli_num_row() 함수를 사용하면 행의 개수를 구할 수 있다. ② 페이지 개수 구하기 한 페이지에 결과를 10개씩 출력하려면 몇 페이지가 나오는지 구해보자. $data_num = mysqli_num_rows($result); $page_num = ceil($data_num / 10); ceil 함수를 사용하면 간단하게 페이지 개수를 구할 수 있다. ③ pagination 생성 기존의 board.php의 하단에 pagination 부분을 만들어주고, for문을 사용해서 페이지 수를 출력해준다. 데이터 5개를 더 추가해서 2페이지가 뜨는지 확인해보자... 2021. 11. 21. 이전 1 2 3 4 5 6 7 8 ··· 10 다음