현재 사용자 이름/비밀번호 인증을 사용하고 어디에서나 액세스할 수 있는 웹 애플리케이션(Apache/PHP)이 있습니다. 서버 측 SSL이 활성화되어 있습니다.
우리의 클라이언트 프로그램은 우리가 수정하고 브랜드를 바꾼 FireFox 버전입니다. 이 수정된 Firefox 클라이언트는 웹 애플리케이션 서버에만 연결하기 위한 것입니다. 사용자는 웹 서비스에 접속하기 위해 반드시 이 클라이언트 프로그램을 사용해야 합니다.
사용자 인증 외에도 클라이언트 프로그램*을 사용하지 않는 사람의 서버 수준 액세스를 차단하려고 합니다. 따라서 사용자가 일반 브라우저를 사용하여 URI를 입력하면 완전히 거부됩니다.
이를 달성하려면 클라이언트 프로그램은 웹 브라우저나 봇이 아닌 클라이언트 프로그램이 사용되고 있음을 서버가 알 수 있도록 서버에 자신을 식별해야 합니다.
*실제 목표는 로그인을 시도하기 전에 그들이 우리 회사의 승인된 직원인지 확인하는 것입니다. 이 "고용 증명서"를 클라이언트 프로그램에 포함시키는 것이 가장 쉬운 방법인 것 같습니다. 꼭 사용해야 하는 사람에게만 주는..
지금까지 나는 이를 달성하는 방법에 대한 몇 가지 아이디어를 가지고 있었습니다.
1.) 클라이언트가 로그인을 할 때 전송되는 클라이언트 애플리케이션에 토큰을 포함시킵니다(로그인은 chrome/XUL 인터페이스에 의해 처리됩니다). 이는 서버 수준에서는 차단되지 않고 애플리케이션 수준에서만 차단됩니다. 키는 비밀번호만큼 쉽게 도난당할 수 있지만 길이나 복잡성이 제한되지 않으므로 무차별 대입으로 쉽게 추측할 수 없습니다.
1a.) 모든 요청의 클라이언트 브라우저 헤더에 특수 tolken 매개변수를 추가합니다. 이는 모호함을 통한 보안과 비슷하지만 요청에서 매직 문자열이 누락되어 로그인이 항상 실패하는 경우(올바른 비밀번호를 사용해도) 비밀번호를 무차별 대입하려는 공격자의 속도를 확실히 늦출 수 있습니다.
2.) 클라이언트 SSL 인증서를 클라이언트 프로그램에 포함시킵니다. 이는 좋은 해결책인 것처럼 보이지만 클라이언트 측 SSL에 대한 좋은 문서는 거의 존재하지 않습니다. 우리는 각 사용자에 대해 인증서에 서명하고 싶지 않으며, 사용자가 인증서를 생성해야 하거나 보안 대화 상자로 전혀 귀찮게 하는 것을 원하지 않습니다. 개인 키는 브라우저에 내장되어야 하며 모든 클라이언트 프로그램 간에 공유되는 하나의 키이며 사용자 정의 브라우저에 설치별로 배포됩니다.
3.) 사용자 에이전트 문자열을 확인하세요. 이를 토대로 Apache가 제한을 가할 수 있다고 생각합니다. 그러나 그것은 기껏해야 약한 척도로 보입니다. 아마도 다른 조치에 추가로 이 작업을 수행할 것입니다.
이 작업을 수행하는 방법에 대한 더 나은 아이디어가 있기를 바랍니다.
답변1
수정된 브라우저에 클라이언트 SSL 인증서를 포함시키는 것이 가장 쉽고 더 안전할 것입니다.
모든 사람에게 동일한 키를 사용하는 경우 클라이언트 인증서의 많은 이점을 잃게 되지만 사용자 에이전트를 확인하는 것보다 낫습니다. 그리고 로그인하려면 여전히 사용자 이름과 비밀번호가 필요하다고 가정합니다.
답변2
VPN에 대해 생각해 보셨나요? 그것은 당신이 정말로 원하는 것과 정확히 같습니다.