반응형 전체 글87 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. Lord of SQL Injection : Orge[7] [Level 7. Orge] Sol → ?pw=7b751aec 7단계는 4단계와 6단계를 섞은 문제이다. 6단계와 마찬가지로 or/and를 사용하지 못하고, 4단계와 마찬가지로 id가 admin인 pw를 맞춰야 하기 때문에 Blind SQL를 사용해야 한다. 6단계에서 or를 ||로 표현했기 때문에, and는 &&으로 표현해줬는데, url에서는 &를 아스키코드로 변환한 %26로 넣어줘야 and로 인식이 됐다. ?pw=' || id = 'admin' %26%26 length(pw) > 5 %23를 넣어 pw의 길이 추론을 시작하였다. 길이를 점점 늘리다가 8이 되는 순간 Hello admin이 표시되지 않았고, ?pw=' || id = 'admin' %26%26 length(pw) = 8 %23을 넣어 확.. 2021. 11. 24. Lord of SQL Injection : Darkelf[6] [Level 6. Darkelf] Sol → ?pw=' || id = 'admin' %23 코드를 분석해보면, admin으로 로그인하면 clear가 가능한데 pw값에 or나 and가 포함되면 안 된다. 즉, pw의 인자로 or/and 없이 id = 'admin'을 넣어주어야 한다. 처음에는 ?pw=' %6F%72 id = 'admin' %23로, or 대신 아스키코드로 %6F %72를 넣었는데 이것도 or로 인식되었다. 그래서 가장 대표적인 or인 ||를 넣어보았다. 5단계도 그렇고 6단계도 그렇고 그 문자 자체를 안 쓰고 다른 방법을 사용하는 것을 요구하는 것 같다. 2021. 11. 23. 이전 1 ··· 5 6 7 8 9 10 11 ··· 15 다음