게시판을 만들던중 도배 방지 기능을 넣는중에 의문점이 생겼습니다. (2)

망치의 이미지

그야말로 단순한 게시판입니다. 부가기능 없이 단지 목록, 쓰기, 보기 정도만 됩니다.

이 게시판에 도배 방지 기능을 넣기 위해 2가지 기능을 적용해두었는데 오늘 이게 무시되는 상황이 발생해서 당황스러워서 질문을 남깁니다.

첫번째 방법은 브라우저 쿠키를 이용해서, 글 쓸때마다 쓸때의 시간을 특정 쿠키에 넣어두고, 글 작성시마다 해당 쿠키값을 검사합니다. 해당 쿠키의 값과 현재 시간 함수를 이용해 일정시간이 지나지 않았을경우 도배로 인식하고 데이터 입력을 거부합니다. 이 방법은 공격 프로그램 사용등의 고의적인 공격시엔 무용지물이라 생각합니다.

두번째 방법은 마지막으로 입력된 DB 값을 참조합니다. 마지막으로 입력된 글의 제목과, 아이피가 같은경우 시간에 관계없이 무조건 도배로 간주하고 데이터 입력을 거부합니다. 그리고 제목이 다르고 아이피만 같은경우는 현재 시각과 비교해 일정시간 이내라면 마찬가지로 도배로 간주하고 데이터 입력을 거부합니다.

이렇게 해두었는데 오늘 어떤 사람이 순간적으로 도배를 하는게 목격됐습니다. 초까지 일치하는 시간으로 약 25개의 글을 동시에 올리더군요. 그 글이 올라올때 DB 부하가 컷었는지 순간적으로 게시판에 접근이 안되는 현상까지 나타났었습니다.

글을 작성한 사람 얘기로는 랙때문이라고 하는데 실제 랙때문에 의도하지 않은 결과가 나타난것인지 공격을 위한 테스트를 해본것인지는 확실치 않습니다. 다만 제가 보기에 공격당할 여지가 있다는것을 확인하고 예방 하고자 해결방안을 찾고 있습니다..

제 예상에 사용자가 랙으로 웹페이지가 잠시 멈춰있는동안 글을 작성후 작성 버튼을 여러번 눌러놨던것이 랙이 풀리면서 웹서버로 한번에 전달이 되고, 너무 빨리 전달된 값때문에 제가 예상치 못한 문제가 생긴것이 아닌가 싶습니다..

update.php 의 DB 쿼리 순서는 다음과 같습니다.

Quote:

도배확인을 위해 마지막 작성된 글 가져오기 - select * from ..... limit 0,1
글 입력(제목) - insert into ........
글 입력(내용) - insert into ........

아래는 해당 글이 올라올때의 웹서버 로그 입니다. 웹서버 기록은 시간이 저렇게 기록됐는데 DB 에 입력된 자료에는 입력된 글의 시간이 모두 같습니다.

이 상황에서 어떤 부분을 어떻게 점검/수정 해봐야 하나요..?

59.x.x.215- - [25/Mar/2006:19:45:16 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:15 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:17 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:18 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:17 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:18 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:21 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:15 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:16 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:17 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:16 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:18 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:21 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:20 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:17 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:13 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:16 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:17 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:19 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:19 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:18 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:16 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:18 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:18 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
59.x.x.215- - [25/Mar/2006:19:45:16 +0900] "POST /xboard/update.php HTTP/1.1" 200 68 "http://www.xxx.com/xboard/record.php?mode=write&id=no1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"

왜 이런 현상이 나타나는지 알고 싶습니다.. 두번째 도배 방지 기능이 동작할때 SELECT 로 도배여부를 확인할때 안잡히고 INSERT 가 돼버리는듯 한데.. INSERT 가 순식간에 많이 일어나서 그런건지.. 이걸 해결 하려면 어떻게 해야하는지.. 보통 대형 게시판에선 어떤 방법으로 도배를 막고 있나요?

ps. 이상하게 아래 원본글에 댓글이 안달리네요 ㅜㅜ.. 세번 시도 해보고 안남겨져서 새 글로 작성합니다...

익명 사용자의 이미지

dsfs df

익명 사용자의 이미지

캅차를 다세요

babbab의 이미지

글을 올리는중 서버가 리셋이 됐다고 하길래 리로드를
눌렀더니 데이타전송을 다시하라고 하냐고 묻더라고요

Yes랬더니 글을 두개가 중복되 올려졌습니다.
죄송합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.