'500 error'에 해당하는 글 2건

간만에 재미진 일.


간만에 사이트 운영팀에서 오류 문의가 속출했다. 등록이 안된다느니, 상세 페이지가 빈화면으로 나온다느니... 훗~ 걱정마라. 언제나 처럼 이 오빠가 해결해 줄테니.


우선 이 님들의 증상이 나에게도 동일한지 확인하였다. 특정 페이지들이 서버 500 에러도 있었지만 status 200 인데 빈화면이 나오는 기괴한 장면이 보여졌다. 동일한 소스의 개발 서버에는 정상적으로 작동하고 있었다. 실서버 로그를 확인해보니, 어제 아무개팀에서 인증서를 갱신했다.(내가 하던걸 왠일로...) 근데 로그를 뒤져보니 그 시간 이후로 오류가 속출했다. 잡았다, 요놈!! 공통적으로 주로 나온 오류들이다. 


INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["https-jsse-nio-8443"]

java.util.logging.ErrorManager: 4

java.io.FileNotFoundException: /usr/share/tomcat8/logs/catalina.2020-01-08.log (Permission denied)

        at java.io.FileOutputStream.open0(Native Method)

...


INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]

[localhost-startStop-2] ERROR o.a.c.s.StandardManager - Exception unloading sessions to persistent storage

java.io.FileNotFoundException: /usr/share/tomcat8/work/Catalina/localhost/ROOT/SESSIONS.ser (Permission denied)

        at java.io.FileOutputStream.open0(Native Method)

...


SEVERE [https-jsse-nio-8443-exec-6] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception

 org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. /var/cache/tomcat8/work/Catalina/localhost/ROOT/upload_46c524e4_8548_4273_9717_ff2e98ca4a2d_00000000.tmp (Permission denied)

        at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest (StandardMultipartHttpServletRequest.java:112)

...


그리고 status 200 이지만 빈화면 나오면서 발생한 로그...


[https-jsse-nio-8443-exec-9] ERROR o.s.b.w.s.ErrorPageFilter - Cannot forward to error page for request [/manage/admin/9] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false


조금 당황스러웠다. 평소에 보던 오류도 아니고... 한가지 힌트는 Permission denied 하난데. 히스토리를 보니 인증서 갱신하고 몇번 톰캣 재부팅을 하는 과정에서 사용자 권한이 좀 꼬인것 같았다. 문제되는 파일들의 소유자가 모두 ROOT 로 실행되어 있던것이 문제. 후... 인증서 갱신하고 톰캣 재부팅만 하면 되는건데 뭐 때문에 ROOT 로 톰캣을 실행시켰을까 ㅡ.ㅡ 톰캣 재부팅으로도 문제는 해결되지 않았다. 이 파일들을 다 일일히 어떻게 찾아서 지우나 고민하던 중 빛과 같은 한 줄기 로그.


[localhost-startStop-1] ERROR o.a.j.EmbeddedServletOptions - The scratchDir you specified: [/usr/share/tomcat8/work/Catalina/localhost/ROOT] is unusable.



캐쉬 디렉토리 같은데 /usr/share/tomcat8/work/Catalina/localhost/ROOT 이 디렉토리를 삭제하니 문제가 해결됐다.

오예~


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

CSRF (Cross Site Request Forgery)
CI에서는 크로스 사이트 요청 위조에 대한 보호가 가능합니다.
CSRF 보호를 활성화하려면 application/config/config.php 를 열고 다음과 같이 설정합니다.

//$config['csrf_protection'] = false;
$config['csrf_protection'] = true;

 

활성화 한 후 view 페이지에서 form_helper 의 form_open() 함수를 사용하면, 폼의 CSRF 보호를위한 hidden 필드가 자동 삽입됩니다.
<?=form_open('form/update')?>
<input type="hidden" name="csrf_token_name" value="bdd350d889c5d8cf961a412107377844" />

 

 

csrf 보호를 활성화 시킨 상태에서 csrf_token_name ($config['csrf_token_name']) 을 함께 전송하지 않으면,
submit 버튼을 클릭할 경우 http 500 error code 를 발생시킵니다.

 

An Error Was Encountered
The action you have requested is not allowed.

 

 

 

Ajax 통신 역시 마찬가지 입니다.

var csrf = $('input[name=csrf_token_name]').val();

var test = $.ajax({
    type: "post",
    url: "form/ajax_auth",
    data : {csrf_token_name:csrf, ...

 

이런 식으로 csrf_token_name 을 함께 전달해야 500 에러를 피할 수 있습니다.

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret