포럼
과도한 새로고침 행위 방어 애드온
2014.04.15 05:15
간단한 알고리즘을 애드온으로 구현해 보고자 했으나... 역시나 간단하지가 않네요 @.@
매우 간단한 기능을 구현 하는데도 이렇게 어려운데 복잡한 모듈이나 애드온 레이아웃 배포해 주시는 분들께 감사의 말씀 드립니다.
과도한 refresh행위를 막아보자!라는 생각으로 만든 애드온이며 알고리즘은 매우 간단합니다.
1. page요청시 "REQUEST_URI + 요청 시간"을 세션에 기록.
- REQUEST_URI는 스트링이 길어질 수 있으므로 md5hash후 보관.
2. 짧은 시간(설정 가능) 이내에 기존의 REQUEST_URI와 동일한 요청이 들어오면 아래의 오류 페이지 표시후 종료.
No available server to handle this request
간단한 기능이니 생각대로 잘 작동하나 싶었는데 "인증 세션 DB사용=예"로 설정을 해봤더니 문제가 발생하더군요.
애드온상에서 exit()하기 직전에 세션을 저장 하면 변경값이 DB에 반영이 안되는 문제!!!
xe폴더내에 php파일을 온통 열어보고 겨우겨우 돌아가게는 만들었습니다 ㅡㅡ;
연습삼아 만들어 본 애드온이지만 사용 해 보실분들은 사용 해 보시라고 파일 첨부합니다.
- 내용 추가: 불필요한 함수 호출부분들을 제거했습니다. 다시 내려받으세요.
댓글 34
-
퍼니엑스이
2014.04.15 09:19
-
BJ람보
2014.04.15 09:22
乃
-
루팡쿠팡
2014.04.15 09:43
exit() 하기 전에 반드시 Context::close() 함수를 사용해서 DB 접속과 세션을 닫아야 합니다.
이게 무슨 말인가요?? ;;
이 애드온 안되나용..?
-
W.O
2014.04.15 17:50
exit 전에 $db_info = &Context::close(); 추가하세요.
세션까지 닫아야되나요?ㅇㅅㅇ
-
W.O
2014.04.15 18:18
또한 닫는다면 어떤 세션을 닫아야할까요? 현재uri와 최종uri가 각각 세션으로 저장되는 것으로 보이는데 최종uri 세션만 닫아야할까요
-
키스투엑스이
2014.04.15 11:11
REQUEST_URI이 새로고침 이외에도 호출되는 경우가 있지 않나요? -
W.O
2014.04.15 18:19
언제 호출될까요?? 허허
-
키스투엑스이
2014.04.15 19:46
저도 잘 몰라서... 껄껄
어디서 그렇게 들은 것 같은데 아닌가보군요 -
W.O
2014.04.15 18:21
좋은 애드온 감사합니다 :)
-
루팡쿠팡
2014.04.15 18:22
exit() 하기 전에 반드시 Context::close() 함수를 사용해서 DB 접속과 세션을 닫아야 합니다.
이 부분 자세히 설명 부탁드립니당...ㅠ
-
prologos
2014.04.15 18:46
퍼니엑스이님께서 말씀하신 Context::close()를 반드시 사용하라는 말씀은 혹시 세션 데이터 누락이 발생할 수 있으니 세션 데이터를 꼭 저장한 후에 종료하라는 말씀 으로 이해를 했습니다.
XE의 Context::close()함수를 살펴보니 php 세션 함수중 session_write_close()함수를 호출하는 함수 입니다.
-
prologos
2014.04.15 18:51
exit()전에 session_write_close()함수를 사용하니 세션을 DB로 사용할때도 세션 변수 변경분도 DB에 반영하고 종료하는것을 확인해서 불필요한 함수 호출 부분들을 제거 했습니다. 도움말씀 주신분들 감사합니다 ^^
-
루팡쿠팡
2014.04.15 18:53
멋진 애드온 감사드립니다!
자료실에 올리셔도 될듯합니다!
-
쿨럭이
2014.04.15 23:51
와..멋진 자료입니다.. 다만 아직 정상작동은 어려운가봐요? 전 설치 해서 20초 로 잡고 테스트했지만
f5 누르는 순간 바로 접속오류가 떠버리네요.. 시간설정이 먹히지 않는 ㅠㅠ
-
prologos
2014.04.16 00:18
오잉? 20초로 설정하셨다면 20초 이내에 동일한 사용자가 동일한 요청을하면 오류메시지를 표시한다는 의미 입니다.
-
쿨럭이
2014.04.16 03:43
ㅇ ㅏ!! 제가 완전 잘못 이해 했네요. 너무 좋은 나머지 급하게 해본다고 내용이해가 부족했었나봐요 ㅠㅠ
완전 좋으네요 ㅎㅎ 대박! 자료실에 올려도 상당히 호응을 부를듯 한데요?
-
루팡쿠팡
2014.04.16 19:28
-
prologos
2014.04.17 09:56
홈페이지 반응 속도가 제각각이니 각자 현재 상황에 맞게 정해야 하는거아닐까요? ㅠㅠ
저는 0.8 설정 했습니다 ㅡ,.ㅡ
-
상자님
2014.04.17 19:26
좋은 애드온이 하나더 추가되었네요
가장좋은방법은 php로 넘어가기전에 서버에서 차단하는것이지만
이걸 설정할수없는 웹호스팅이나 초보운영자분들에게 하나의 대안이되겠습니다
-
zombiman
2014.04.17 20:13
멋집니다~!
-
루팡쿠팡
2014.04.18 00:08
테스트를 해봤습니다!
F5, ctrl + F5, ctrl + r 는 다 막아주는데,
오른쪽 마우스 + L 를 누르는것은 막지못하더군요 ㅠㅠ
그래도 최고입니다!
-
prologos
2014.04.18 01:35
음... 어드민 페이지 사용시 문제가 조금 있는거 같네요 ㅠㅠ 이 문제를 어떻게 해결해야할지 생각좀 해봐야 겠습니다 @.@
잠시 고민하다가 그냥 관리자의 경우 해당 애드온의 영향을 받지 않도록 수정했습니다 ㅎㅎㅎ
-
루팡쿠팡
2014.04.19 04:15
추가로 오류 몇가지 더 발견했습니다.
이 애드온을 사용하면 사이트 디자인 설정을 할 수 없습니다. (서버에 요청중입니다... 라는 문구가 끊임없이 지속.)
(이 애드온을 끄면 정상적으로 다시 되돌아와짐.)
그리고 가끔,
주소창에 도메인을 입력후 바로 들어가면
HTTP Server Error 503 에러가 뜨는 현상이 생깁니다.
-
prologos
2014.04.19 04:44
새로 내려 받아서 설치 해 보세요. 캐시도 재생성 해보시구요 -
쿨럭이
2014.04.19 11:57
음.. 버그가 있긴 잇네요. 파일첨부시 파일이 첨부중 멈춰버리는 증상!? ㅎㅎ
ㅠㅠ
-
prologos
2014.04.19 20:50
헛! 첨부파일 종류는 무엇이었으며 용량은 어느정도 인가요?
-
루팡쿠팡
2014.04.29 23:22
@prologos 님 이거 네이버봇, 구글봇도 차단하나요?
-
AJKJ
2014.04.19 22:04
저는 예전부터 생각만 해 보았는데, 벌써 만드셨군요. ^^ 이런 기능도 한번 제안해 봅니다.
1. mod_geoip 기능이 설치된 서버에서는 나라별로 접속을 원천 차단 또는 reCapthca + 차단 메시지 출력
2. 과도한 새로고침 시도시, 접속 차단이 아닌 매번 reCaptcha 출력 이런 것처럼 이요.
3. 차단시 http get으로 들어온 것만 차단하는게 좋을것 같습니다. post로 들어온것까지 차단하면, 파일을 어려개 업로드 하는 경우나, AJAX까지 차단이 되지 않을까 하는 생각이 듭니다. 위에 분들의 파일업로드나 사이트 로딩중일때 문제가 생기는것이 그것 때문이 아닐까요? http get에 대해서는 현재와 같이 깐깐한 규정을 적용하고, http post에 대해서는 비교적 널널한 규정을 적용하거나, 규정을 적용하지 않는게 좋을것 같습니다.
$_SERVER['REQUEST_METHOD'] 로 알 수 있을것 같습니다.
4. 저 같은 경우에는 홈페이지에서 여러개의 글을 볼 경우 모든 글들을 탭으로 열어놓고(거의 1초에 5~7개 정도의 글을 클릭하는것 같네요.), 한개씩 보는 스타일입니다. 이 경우 차단이 될 수 있을것 같네요. 그런경우를 대비하여 최초 3초에 10건까지는 http get을 허용하고, 만약 그 규정을 넘는다면, 1초에 1개의 http get을 허용하는 방식으로 가면 좋지 않을까 생각해 봅니다.5. 구글봇이나, 네이버 봇까지 차단 될 우려가 있을것 같네요. 즉 이 애드온을 사용하면 검색엔진이 웹사이트를 탐색하지 못할 수도 있을것 같아요. UserAgent를 체크하여, 각종 검색봇은 차단에서 제외 시키는것은 어떨까요?잘못 생각했네요. 급히 수정합니다.
괜히 주절됬나요;;; 이렇게 적다보니 애드온이 꽤나 복잡해질것 같네요.;;;
그리고 애드온 라이센스도 명확히 해 주시면 좋을것 같습니다.
-
루팡쿠팡
2014.04.20 17:46
구글봇이나, 네이버 봇까지 차단될수도 있나요? ;;
-
AJKJ
2014.04.20 22:59
제가 잘못 생각했습니다. 차단이 되지 않을것 같습니다. Query String을 체크하니까요.
-
RedLan
2014.04.21 00:29
가장 깔끕한건 ... 방화벽 단에서 차단하는게 최고입니다 ...
동일 IP에서 1초에 10번 이상 Request가 올경우, iptables 에 'DROP' Rule을 일시적으로 적용 하여, 과도한 새로고침을 막는 방법이 가장 좋은거 같습니다 ...
-
geogeo123
2014.07.19 03:00
카페24호스팅에서도 방화벽 단에서 차단하는거 가능한가요?
-
사랑해요XE
2014.08.28 12:21
자세한 방법좀 알려주세요.. 어떻게 해야할지;
-
사랑해요XE
2014.08.28 12:22
이 애드온도 에러만 안나게 조금만 다듬어지면.. 정말 멋진 애드온이 될 아까운 애드온..
예기치 못한 오류가 생길 수 있기 때문에, exit() 하기 전에 반드시 Context::close() 함수를 사용해서 DB 접속과 세션을 닫아야 합니다.