2016-08-04 3 views
0

나는 ExpressJS에 익숙하지 않고, (데이터베이스에 저장된) 그의 ip에 대한 로그인 실패 횟수가 허용 된 최대 숫자를 초과하면 사용자와의 연결을 끊을 필요가 있지만 어떻게해야하는지 문서를 찾을 수 없다. 이 작업을 수행. 그것은 server.close()처럼 보이지만, 이해할 수 있듯이 일부 연결뿐만 아니라 전체 서버를 닫습니다. 그렇다면 ExpressJS 미들웨어에서 연결을 끊는 방법은 무엇입니까?ExpressJS 접속 끊기

+1

사용자가 데이터를 보낼 수있는 것은 아니지만 'res.end'를 직접 호출하면 응답이 "빈"html 파일이되어 거의 동일한 효과가 나타납니다. – DrakaSAN

+0

@DrakaSAN 덕분에, 그것은 정말로 효과가 있으며, 내가 필요한 것일 수도 있습니다. – snowfinch27

+1

마지막으로 실패한 시도에서 클라이언트를 쿠키로 만들었습니다. 그런 다음 쿠키를 확인하고 DrakaSAN이 제안한대로 사용자 정의 미들웨어를 추가하십시오. 즉, DB에 쿼리를 스팸하지 않고도 복잡한 요청 처리를하기 전에 미들웨어를 넣을 수 있습니다. 물론 클라이언트가이를 차단하거나 수동으로 지울 수 있기 때문에 유일한 수표가되어서는 안됩니다. 그냥 생각. – Mic

답변

1

ExpressJS는 HTTP (S) 요청을 처리하는 브라우저에 연결을 제공하지 않으므로이를 삭제할 방법이 없습니다. 소켓 (Sockets)은 제공하지만, 당신의 경우는 그렇지 않다고 가정합니다.

이 경우 '최대 로그인 시도 횟수에 도달했습니다.'와 같은 메시지로 응답을 보낼 수 있습니다. * 분 후에 다시 시도하십시오. ' 로그인 폼을 숨길 수도 있습니다.

+0

NodeJS에서 소켓을 사용할 수 있습니까? – snowfinch27

+0

여기에 멋진 lib가 있습니다. [socket.io] (http://socket.io/). 그러나 어떤 목적으로 소켓이 필요합니까? –

+0

실패한 로그인 수 (데이터베이스)를 기반으로 단일 사용자와의 연결을 닫을 필요가 있습니다. 이제는 다른 방법을 찾아 낼 수 없습니다. – snowfinch27

3

"드롭"연결을 사용하는 다른 방법은 즉시 res.end()을 호출하여 빈 응답을 보냅니다.

유일한 단점은 요청이 이전 미들웨어를 통과하므로 미들웨어를 대상으로하는 DoS 공격으로부터 보호 할 수 없으며 DDoS 공격의 경우 전체 연결을 삭제하는 것보다 효과적이지 않을 것이라는 단점이 있습니다. .