본문 바로가기

전체 글352

zend(php) 소스 끄적끄적 [accel_interned_strings]아직 잘 모르겠으나... 문자열을 저장하는 것으로 보이고interned_strings_saved_top, interned_strings_top 등이 있는데 이를 통해서 한번에 어떠한 context을 지우고(pop)할 수 있는거 같다.문자열 단위 push/pop이 가능하고,어떠한 context가 끝나면 그 context에서 사용한 문자열들을 전체 삭제가 가능하다.-> accel_interned_strings_restore_state(현재 context의 위치를 기록하는건 -> accel_interned_strings_save_state) accel_interned_strings_save_state 후에accel_new_interned_string 이런걸로 문자열을.. 2017. 12. 1.
php_screw는 소스배포용으로는 적합하지 않다. (복호화 모듈 소스) php_screwphp_screwim https://github.com/OOPS-ORG-PHP/mod_screwim 이 둘은 php코드를 암호화하여 저장하고 별도로 컴파일한 모듈을 로드해소스를 보지는 못하지만 실행만 가능하게 하는 php모듈이다. php_screw.so 모듈과 암호화된 php파일을 입수하면 물론 리버스엔지니어링을 통해 Key을 알아내서 복호화 할 수 있지만 그래도 복잡한 작업이다.따라서 설정파일 등을 암호화해서 저장해놓고 screw 모듈을 올려놓으면 web shell등에 대해서는 어느정도 보안성이 증가한다. 하지만 screw을 php소스 배포용으로 사용하는것은 부적절하다.1. screw을 자기만의 key으로 컴파일한다.2. 컴파일한 screw을 통해 php소스를 암호화한다.3. 암호화된 .. 2017. 11. 30.
끄적끄적... Non-blocking socket에서 recv하는 도중 -1리턴과 함께 errno==EAGAIN이면 더이상 읽을 데이터가 없단 뜻.. epoll & tcp listen socket 사용시 EPOLLET(Edge trigger)사용시 epoll_wait을 통해 이벤트 받았을 때 한번씩만 accept하면 accept못하는 클라이언트 발생.(확인안해봄) EAGAIN이 나올때까지 accept하거나Listen socket에는 Edge trigger을 사용하지 않고 그냥 Level trigger만 사용.당연히 Receive에는 ET사용. epoll사용시 같은fd에 대한 이벤트가 여러Thread에서 처리될 수 있다.이런경우 순서의 문제 등이 발생할 수 있는데 EPOLLONESHOT을 통해 이러한 문제가 해결 가능하.. 2017. 11. 29.
StartSSL(StartCom)의 서비스 종료 결정 지난 11월 16일... Termination of StartCom business이란 제목으로 글이 올라왔습니다. 원글 : https://www.startcomca.com/index/News/newDetail?date=20171116 16th Nov. 2017.StartCom has played a critical role as a Certification Authority in data security and electronic commerce by providing an independent "trusted third party" guarantee all these years. Around a year ago the majority of the browser makers decided to dist.. 2017. 11. 28.
TCP는 Stream프로토콜이지 Message프로토콜이 아니다. 송신측char data[2048] = "Some datas...";send(fd, data, 2048, 0); 수신측char data[2048];recv(fd, data, 2048, 0); 이런 간단한 코드가 있을 때...과연 데이터가 정상적으로 2048바이트의 데이터를 받을 수 있을까? 정답은 No(일 수 있다)이다.fragment발생 시 한번의 recv에 모든 데이터를 받지 못할 수 있다.recv(fd, data, 2048, 0); 에서 실제로는 1000바이트만 받을 수도 있다. (1) 그래서 보통 패킷전송을 할 때 Header을 앞에 붙여서 전송한다.제일 간단한 헤더라면 데이터의 길이를 앞에 붙이는 방식이다.이런 식으로 전송하고 받는 쪽에서는 실제 데이터길이만큼 받을떄까지 반복해서 recv을 해야 .. 2017. 11. 14.
효율적인 그리고 안전한 소켓 통신 서버 Thread pool을 이용해서 소켓 서버를 만들 때 recv하는 방법은 대체로 쉽다.Windows에서는 IOCP로, Linux에서는 epoll을 이용하면 된다.이런걸 이용한 예제는 참 많지만... 실제 서버에 적용하면 문제가 생길 가능성이 있다.TCP send의 경우 클라이언트가 데이터를 받는걸 확인해야만 return한다.(물론 전송 실패 시에는 한참 뒤에 return한다.)만약 한정된 Thread pool에서 클라이언트에게 데이터를 전송하는데 마침 전송중인 모든 클라이언트의 연결이 강제로 끊긴 다면?서버는 오랜 시간 Waiting하다가 겨우겨우 다음 데이터를 처리할 것이다.이런일이 발생할까? 고려해야 할까? 할 수도 있지만 충분히 가능한 시나리오고이걸 악용한다면 매우 쉽게 DoS공격을 할 수도 있다... 2017. 11. 13.
반응형