IE를 사용하여 CGI에서 UTF-8로 textarea의 내용을 넘겨줄때 "/* ... */" 형식의 텍스트가 있으면 네트웍이 먹통이 됩니다. -.-??

raymundo의 이미지

좀 황당한 일을 겪고 있는데요.. 도대체 제가 질문하면서도 정확한 상황을 알리기조차 힘들군요 =.=;

상황 요점:
* 내PC - 윈도우즈 XP SP2. IE6.0
* 서버 - 리눅스 CentOS, 아파치, 펄
* UTF-8로 인코딩된 CGI 폼의 textarea에 텍스트를 입력하고 submit 버튼을 누르면 전송이 되고 저장이 되는데, 만일 텍스트 내에 "/*"와 "*/" 쌍, 즉 C언어 스타일의 코멘트가 들어가면 submit 버튼을 누르는 순간 내PC와 서버 사이의 접속이 몇 분 동안 먹통이 됨

좀 더 자세하게:

저는 위키위키로 만든 홈페이지가 있습니다. Perl로 짜여진 UseModWiki 소스를 가져왔다가, 지난 몇 년간 저나 몇몇 사람들이 그 소스를 뚝딱거려서 필요한 기능 추가하고 고치고 해서 사용 중인데요.

이걸 EUC-KR이 아니라 UTF-8로 썼으면 싶어서 요즘 다시 수정 중입니다. 일단 스크립트를 비롯한 텍스트 파일들 자체를 UTF-8 인코딩으로 저장을 하고, 위키네임을 판별하기 위한 정규표현식 패턴을 손을 보고, 현재 일단 제대로 뜨고 저장되는 정도까지는 작업이 되었습니다.

직접 해당 페이지를 보여 드리면서 설명을 드리면,

* http://gypark.pe.kr/cgi-bin/utf/wiki.pl/TestPage

* 위 페이지에 가면 "TestPage"라는 이름의 페이지가 있습니다.

* 우측 하단에 있는 "이 페이지를 수정"을 클릭하거나, 페이지 아무 곳에서나 마우스 더블 클릭을 하면 페이지 수정 화면으로 들어갑니다.

* 내용을 임의로 입력하고 아래 "저장" 버튼을 누르면 페이지 내용이 바뀐 것을 알 수 있습니다. (여기까지는 정상적인 경우)

* 근데 수정 화면에서, 텍스트 에리어에 C 언어 스타일의 주석, 즉 /* .. */ 를 적고 저장하기 버튼을 누르면... 다음과 같은 증상을 보입니다.

==> IE는 한참 동안 다음으로 넘어가지 못하고 버벅댐
==> 저 서버에 ssh로 접속되어 있던 Putty 창들은 죄다 접속이 끊김
==> 몇 분 동안은 새로 ssh접속도 안 됨 (타임아웃)
==> 브라우저로 저 서버IP에 존재하는 어떤 사이트를 접속해도 실패

* 그런데 이렇게 먹통이 된 동안에도, 제 브라우저로 다른 웹사이트(KLDP라거나)에 접속하는 건 아무 문제 없고요, 반대로 다른 컴퓨터에서 저 서버로 접속하는 것도 문제가 없습니다. 심지어 저 위키에도 바로 접속이 됩니다. (접속해 보면 이미 좀 전에 수정한 내용은 반영이 되어 있습니다) 즉 오직 제 컴과

도대체 어느 부근에서 문제가 되는지 확인하려고, CGI 스크립트에다가 die "메시지"; 라인을 중간중간 옮겨보면서 확인하려고 했더니만...

세상에나, 스크립트가 시작하자마자 (첫 줄에 "#!/usr/bin/perl" 라인이 있고 두번째 줄에 die) 죽게 했는데도 이 증상이 나타납니다.

보통은 스크립트가 죽으면 브라우저에는 Internal Server Error 라고 뜨거나, 스크립트의 die 메시지가 뜨잖습니까? 그런데 이 경우에는 그런 것도 없습니다. 브라우저는 하염없이 먹통입니다. 옆자리 컴퓨터로 ssh접속한 상태에서 아파치로그를 보면, 스크립트는 이미 한참 전에 죽어 있습니다. -_-;

두번째 줄에 die를 시켰는데도 증상이 나타나는 걸로 봐서 스크립트가 데이타를 받아서 처리할 때의 문제는 아니란 얘기 같고, 입력폼이 뜨고->텍스트를 입력하고->submit해서 POST 요청이 넘어가서 스크립트를 호출하는 사이에서 뭔가 꼬이는 것 같은데... 제 입력폼 소스에 뭔가 문제가 있는지...

또 사람 심란하게 만드는 건... 저 증상이 항상 발생하는 것도 아니라는 점입니다.. 어느 순간에는 잘 저장되기도 합니다. 그러다가 다시 좀 고치고 저장하기 누르면 먹통이 된다거나...

참고로,
* 애초에 페이지 수정을 Linux, FireFox 에서 할 때는 전혀 문제가 없습니다. (윈도우즈용 불여우는 아직 확인 못했음)
* UseModWiki에서 갈라져나온(?) oddmuse의 경우는 이런 문제가 없습니다. 입력폼 양식 등은 거의 유사한 것 같은데..
* oddmuse 테스트는 http://gypark.pe.kr/cgi-bin/oddmuse/wiki.pl 에서 하실 수 있습니다.

KLDP의 고수님들이 좀 확인해봐주시면 감사하겠습니다. ㅠ,ㅠ

송효진의 이미지

ie6 방금 주석 달았습니다.
잘 됩니다.

바이러스나 애드웨어를 의심해보세요.

emerge money

raymundo의 이미지

어제 오후부터 밤까지, 그리고 오늘도 좀 전에 몇시간 계속 속썩이더니만 지금은 갑자기 되고 있습니다 OTL 주석 기호 자체가 문제가 아니라 다른 조건이 있는건가... 확인해봐주셔서 감사합니다 ^^;

좋은 하루 되세요!

송효진의 이미지

js 로 img.src = 해당서버의 이미지경로
를 200번 루프 돌리기만 해도,
해당 현상이 일어날 수 있습니다.
그 서버로의 커넥션이 수백개가 생겨버리는거죠.
그런류의 문제가 발생할 여지가 없는지 보세요.

emerge money

raymundo의 이미지

처음에는 서버에 과부하 또는 커넥션의 무수한 증가를 의심했는데요,

다른 컴에서(제 컴에서는 끊겨버리니 -_-;) 쉘로 접속해놓고 계속 netstat, top 등으로 확인해도 딱히 늘어나는 커넥션도 없고 프로세스가 는다던가 CPU사용이 늘어나지도 않았답니다. 그리고 EUC-KR 스크립트와 비교해도 오직 인코딩만 다르고 그 부분 코드는 조금도 바뀌지 않은 상태였거든요.

본문에도 언급했었지만 가장 압권이었던 게... wiki.pl 스크립트의 두번째 라인에 die; 를 넣어서 아무런 일도 못하고 죽게 만들었음에도 submit 버튼을 누르는 순간 그 증상이 나타날 때였죠 -.-; tail 로 아파치 로그를 실시간으로 보고 있으면, submit 버튼을 누르면 스크립트는 바로 die하는데 제 브라우저는 그 때부터 계속 버벅댈 때도 있었고, 아예 die, 아니 access_log 쪽에 의하면 스크립트 실행 자체가 submit 버튼을 누르고 한참 있다가 이뤄지기도 했었답니다.

암튼 귀신에 홀린 것 같고, 언제 또 다시 그렇게 될지 몰라 불안하네요. =ㅅ=;

좋은 하루 되세요!

송효진의 이미지

네 서버엔 이상 없습니다.
익스플로러가 혼자 200개 만들고 자기컴퓨터에 접속된 커넥션을 모조리 끊어먹습니다.
서버 조사는 필요 없고,
클라이언트를 조사하세요.

해당현상이 있을 때 익스플로러의 정지 버튼 연타 esc 연타해 보는것도 증상확인에 도움이 될듯 합니다.
익스플로러가 제대로 정지되면 커넥션이 돌아오겠죠.
해당 현상이 나타난다면 js 에 무한루프 있나 보시고,
익스플로러 -> 도구 -> 확장기능 에서 이것저것 사용안함 해 보시는 등등
윈도를 마구 주무르세요.

emerge money

aero의 이미지

웹페이지는 반영되었는데도 클라이언트(웹브라우저) 쪽에서는 먹통이 되었다면
http 요청과 응답은 문제없이 이루어 졌는데 클라이언트가 서버측의 응답을
제대로 처리하지 못해서 생기는 문제 같네요.

burpsuite같은 proxy형태의 http 프로토콜 분석툴을 사용해서
http://portswigger.net/suite/

http 요청과 응답을 중간에서 가로채 보면서
잘 될 경우와 먹통이 될 경우를 비교해보시면 답이 나올것 같습니다.

뭐땜에 그런현상이 발생하는지 궁금하네요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.