웹 응용 프로그램의 라이센스 키 솔루션, 가장 좋은 방법은 무엇입니까?


14

관리자의 요청으로 인해 혼란에 빠졌습니다. 소규모 신생 회사에서 일하고 있으며 MUCH 대기업과의 유지 관리 계약을 통해 고정 요금의 웹 애플리케이션을 개발했습니다. 대기업이 마지막 순간에만 청구서를 지불하는 방법에 대한 공포 이야기를 알고 우리는 지불하지 않으면 소프트웨어가 더 이상 작동하지 않는 방식 으로이 웹 응용 프로그램의 라이센스를 부여함으로써 자신을 보호하기로 결정했습니다.

데스크톱 응용 프로그램 에서이 작업을 수행 한 것을 보았지만 내부에서 호스팅하고 인터넷에서 액세스 할 수없는 웹 응용 프로그램입니다.

이 작업을 수행하는 가장 좋은 방법은 적은 공간을 차지하고 배포 한 라이센스 키를 갱신하는 기능입니다.

비슷한 일을 한 사람이 있습니까? 우리는 완전히 마음에서 벗어 났습니까? 더 나은 제안이 있습니까?


이 작업을 제대로 수행하려면 많은 시간 이 필요합니다 . Java 프로그램을 보호하도록 설계된 제품을 구매하는 것이 훨씬 저렴합니다. 그렇지 않으면 라이센스를 프로그램이 읽은 다음 작동하는 Java 바이트 코드 스 니펫으로 만듭니다.

그것이 내가 두려워하는 것입니다. 타사 솔루션을 살펴볼 것입니다. 그러나 우리는 이미 고통스럽게 과잉 지출하고 있습니다.
maple_shaft

그런 다음 지불 기한 2 주 후에 고통스럽게 느리게하십시오.

@ Thorbjørn, LOL !! ^ _ ^이 프로젝트를 유혹하는 것은이 회사와의 추가 사업을 시도하고 망치는 손실의 리더입니다. 최고 품질은 가장 중요합니다. 동시에 우리는 우리가 허니팟을 찾는 동안 완전히 조여지는 것을 원하지 않습니다.
maple_shaft

@maple, 나쁜 사업 계획처럼 들립니다. 그런 다음 돈을 모아 회계사에게 맡기고 멀웨어 전달을 고려하지 마십시오.

답변:


9

이와 같은 것을 구현하는 방법에는 여러 가지가 있지만, 너무 어렵지 않은 방법이 있습니다.

블랙리스트에있는 라이센스 키 해시가 포함 된 파일을 호스팅하는 공개 웹 사이트가 필요합니다. 이 파일을 관리하는 방법은 사용자에게 달려 있지만 파일 자체에는 한 줄에 해시 만 있으면됩니다.

그런 다음 반복적으로 소프트웨어는이 파일의 다운로드 (대부분의 서버 측 언어에서 제공)를 시작한 다음 설치된 라이센스 키의 해시를 검색합니다. 발견되면 블랙리스트가 제거 될 때까지 응용 프로그램이 죽어야한다는 것을 응용 프로그램에서 알 수 있습니다.

이를 위해서는 MD5 또는 이와 유사한 비밀이 충분해야합니다. 당신은 더 멋진 것을 얻을 수 있고 응용 프로그램이 귀하의 사이트로 요청을 보내도록 요청하고 즉시 데이터베이스에서 요청을 찾을 수 있지만 파일 (내가 희망적으로 짧은 목록이 될 것이라고 가정)은 희망적으로 작게 남아있을 수 있습니다. 가장 쉬운 방법.

더 어려운 부분은 응용 프로그램을 죽게 유지하는 것입니다. 결국, 당신은 이것을 내부 어딘가에 저장해야합니다. 즉, 지나치게 명백한 경우 쉽게 파괴 될 수 있으며, 지나치게 명확하지 않은 경우에도 적절한 테이블을 복원하여 쉽게 되돌릴 수 있습니다 파일. 따라서 두 번째 보호 방법도 제안합니다.

이 방법은 테이블 또는 파일에 "LIVE"또는 "DEAD"(또는 이와 유사한 것)를 저장하지만 다시 해시됩니다. 이것은 소금과 타임 스탬프로 해시되어야합니다. 응용 프로그램의 페이지가 실행될 때마다 "LIVE"+ salt + timestamp의 해시 버전으로이 값을 확인한 다음 유효한 타임 스탬프 범위 (예 : 하루, 이틀, 일주일, 한 달 등)를 허용하십시오. 범위가 클수록 성능이 저하 될 수 있습니다.). 사물이 일치하거나 일치하는 한 앱은 살아 있습니다. 그렇지 않으면 특수 파일 또는 테이블의 값이 "LIVE"인 경우에도 타임 스탬프가 임계 값을 벗어나기 때문에 백업에서 복원을 시도하면 해당 값이 여전히 작동하지 않습니다.

요약하면 ( 여러 종류의 체크섬이나 다른 방법과 같은 라이센스 키 의 유효성 을 검사하는 프로그래밍 방식이 있다고 가정합니다 ).

  • 블랙리스트 확인
    • 소금으로 라이센스 키를 해시로 변환
    • 서버에서 블랙리스트 파일 요청
    • 파일에 해시가 있습니까?
    • 예인 경우 "DEAD"+ salt + 타임 스탬프의 해시를 저장하십시오 (일로 잘림, 시간 + 일 + 분을 저장할 필요 없음).
    • NO 인 경우 "LIVE"+ salt + timestamp (trunc'd)의 해시를 저장하십시오.
  • IsKeyAlive
    • "LIVE"+ salt + trunc'd timestamp에서 해시 만들기
    • DeadAlive 해시로드
    • 그들은 동의합니까?
    • 그렇다면, 우리는 살아 있습니다. TRUE를 반환합니다.
    • NO 인 경우 사망했을 가능성이 있지만 타임 스탬프 창 내에있을 수 있습니다.
      • 타임 스탬프에서 하루를 빼고 해시를 반복합니다.
      • 우리는 지금 동의합니까?
      • 예? 참 반환
      • 타임 스탬프에 하루 추가 및 해시 반복
      • 우리는 지금 동의합니까?
      • 예? 참 반환
    • 현재 타임 스탬프 범위를 벗어났습니다. FALSE를 반환하십시오. (킬 앱)

자선은 이것이 실패 할 수있는 백만 가지 방법이 있다는 것을 알고 있습니다. 가능한 모든 방법을 고려하고 신뢰할 수있는 시스템을 작성하십시오 (블랙리스트 파일을 다운로드 할 수없는 경우 클라이언트가 올바른 것으로 가정하는 시스템 포함). 배포하기 전에 테스트, 테스트, 테스트 및 추가 테스트를 수행하십시오. 잘못되면 클라이언트의 신뢰를 잃게됩니다.


+1 엄청나게 복잡한 대답 O_o. 나는 틀렸을 수도 있지만 이것이 상당히 복잡 할 필요는 없다고 생각합니다. 단일 클라이언트를위한 사용자 지정 빌드 응용 프로그램 인 Microsoft Office를 배포하지 않습니다. 이 응용 프로그램을 호스팅하는 서버가 외부 서비스와 통신하지 못할 수도 있다는 동일한 문제가 여전히 남아 있습니다. 암호화, 해시 및 솔트가 실제로 필요한 이유를 이해하지 못합니다. 우리가 정말로 원하는 것은 효과적으로 킬 스위치입니다.
maple_shaft

고마워 ;-) 해시를 사용하는 것이 트래픽을 스니핑하거나 고객의 코드 / 테이블 / 파일을 보는 사람이 세상에서 무슨 일이 일어나고 있는지 알 수 없도록하기 때문입니다. 해시는 양측이 없으면 아무것도 의미하지 않으며 클라이언트는 해시가 실제로 라이센스 키를 나타내는 것으로 파악할 수 없습니다. (일반적으로 전송 된 경우 즉시 알 수 있습니다.) 마찬가지로 블랙리스트 파일에서 암호화 또는 SSL을 수행 할 필요성도 줄어 듭니다. 해시 자체는 zip을 의미합니다.
Kerri Shotts 2018 년

참고 사항 : 클라이언트가 특정 테이블 / 파일의 복원이 너무 어렵다는 것을 알고 있다고 확신하면 앱을 실행할 때마다 확인을 제거하여 복잡성을 상당히 줄일 수 있습니다. 즉, 무슨 일이 일어나고 있는지 파악하고 그 길을 찾는 데 너무 오래 걸리지 않을 것입니다.
Kerri Shotts 2018 년

1
Checkblacklist : license-server.example.com: no route to host이제 무엇? 라이센스 서버는 미래 에도 언젠가는 존재 하지 않을 수도 있습니다. 회사 20 년 후에도 살아남을 것이라고 말하지 마십시오 . 이는 통계적으로 불가능합니다.
Piskvor

1
자체 서버를 사용하지 않는 등 여러 가지 방법으로이 문제를 해결할 수 있습니다. 아마존이나 구글 등을 사용하십시오. 또는 호스트가 죽은 경우 사용자가 앱을 계속 사용할 수 있도록 수표에 "신뢰"를 구축하십시오. 게시물에서 언급했듯이 실패 할 수있는 백만 가지 방법이 있으며 실제로 이런 종류의 검사에 반대하는 이유입니다. 나는 이런 종류의 수표를 내놓는 것보다 내 고객을 신뢰하고 싶습니다. (자체 라이센스 키, 내가 갈 것입니다. 그러나 블랙리스트에 올릴까요? 노력할 가치가 없습니다. IMO.)
Kerri Shotts

4

다른 답변은 이미 기술적 인 측면을 다루는 데 도움이되었습니다. 그러나 법적인 측면도 고려하십시오.

그들이 지불하지 않으면 앱을 차단할 권리가 있습니까? 계약서에서이를 사전에 언급하지 않은 경우, 지불이 실패하더라도 (판매 한 물건을 반드시 소지 할 자격이없는 것처럼) 계약을 체결 할 권리가 없을 수 있습니다. 또한 많은 국가에서 "컴퓨터 프로그램 조작"을 금지하는 특별법을 보유하고 있습니다. 귀하가하는 일이 그렇게 간주 될 수 있으며 귀하를 형사 책임에 노출시킬 수도 있습니다.

그래서 뜨거운 물에 빠지지 않도록 먼저 변호사와 상담하는 것이 좋습니다.

결국 법률 시스템에 의존하는 것이 좋습니다. 그들이 지불하지 않으면 협상하고 도움이되지 않으면 고소하십시오. 많은 국가에서, 계약 상황이 분명한 경우 고소는 비교적 고통스럽지 않고 저렴합니다 (예를 들어 독일 에서는 20 € 미만 으로 Mahnbescheid 를 받을 수 있음 ).


우리가 견과인지에 대한 내 질문에 대답하는 것과 관련이 있습니다. 나는 선택의 여지가 없지만 계약에없는 경우에도 내 상사가 강렬한 무언가라는 뚜렷한 인상을 받았습니다. 불행히도 저는 미국에서 살고 일하는데, 당신이 옳더라도 대기업을 맡을 수 없습니다. 그들은 원한다면 우리를 사업에서 벗어날 수있을만큼 문서에 모든 것을 묻어 줄 변호사들로 구성되어 있습니다.
maple_shaft

법적 채널 사용에 대한 @sleske에 동의합니다. 계약이 올바른지 확인한 다음 계약 조건을 위반할 경우 고소하십시오. 또는 적어도 고소하겠다고 협박하십시오. 내가 대기업에서 본 것처럼, 그들은 고소 나 계약 위반을 피하기 위해 공급 업체에게 기꺼이 돈을 지불하려고합니다.
RationalGeek

@maple_shaft : 미국의 법적 상황에 대해서는 전혀 모르지만, 법적 상황이 페인트 칠만큼 절망적이지 않기를 바랍니다. 어쨌든, 당신이 이것을 구현하라는 지시를 받았다면, 나는 잠재적 인 문제를 지적 할 것입니다. 당신이 여전히 미리 가면 (물론, 글로) 얻을 수있는 모든 것을 다 한 것입니다.
sleske 2016 년

라이센스가 만료되면 앱이 쓸모없는 시간 제한 라이센스 시스템에는 아무런 문제가 없습니다. 많은 회사들이 크고 작은 일을합니다. 예를 들어 Adobe입니다.
James Snell

2

내부에서 호스팅하는 경우 다른 소프트웨어와 어떻게 다른가요? 예를 들어, 데스크탑 재고 표시 애플리케이션과 같이 배송 할 때 수행 할 작업을 파악하여 수행하십시오.


나는 일반적으로 무엇을 해야할지 혼란스러워합니다. 응용 프로그램은 라이센스 번호가있는 외부 웹 서버에 요청을 보내 라이센스 키에 대해 야간 점검을 수행해야한다고 생각합니다. 응답은 성공 또는 실패이며 응용 프로그램 컨텍스트 레벨 변수에 저장됩니다. 라이센스 키가 유효하지 않으면 응용 프로그램은 기본적으로 "꺼져"있습니다. 이런 식으로 필요한 경우이 라이센스 번호를 간단히 "무효화"할 수 있습니다.
maple_shaft

이 간단한 라이센스 인증 페이지를 SSL로 암호화해야한다고 생각하십니까? 누군가가 패킷 스니퍼를 구현하고 유효한 라이센스 번호를 도출 할 수 있다고하더라도 유용하게 활용하려면 애플리케이션의 분산 사본이 있어야하며, 심지어 매우 목적에 맞게 구축됩니다. 직접 고객 이외의 다른 사람에게 유용하다고 생각할 수 없습니다.
maple_shaft

1

시스템에 따라 다릅니다. Magneto와 같은 기존 프레임 워크를 확장 했습니까? 아니면 전체 응용 프로그램을 처음부터 작성 했습니까? 나중에 필요한 경우 라이센스 요구 사항을 작성하는 것이 그리 어렵지 않습니다. 단기간 라이센스로 애플리케이션을 제공하면 비용은 청구 후 45 일 후에 만료되며 나중에 영구 라이센스를 제공합니다.

이것은 당신이 소스를 뒤집지 않았다고 가정합니다. :)


우리는 소스를 넘기지 않습니다. 필요한 경우 소스 코드를 제어하고 정식 릴리스 및 버그 수정을 배포합니다.
maple_shaft

1
@maple_shaft : 글쎄, 유지 보수가 초기 구매에 내장되거나 정기적 인 지불 날짜와 함께 진행중인 것으로 판매되는 것으로 의심되기 때문에 청구서가 지불 될 때까지 수정이나 업데이트를 발행하는 것을 항상 거부 할 가능성이 있습니다. 일반적으로, 항상 그런 것은 아닙니다).
Vatine

@Vatine에 대한 후속 조치로, 강력한 라이센스가없는 이전 프로젝트의 경우 지불을 추출하기위한 결함으로 결함을 사용했습니다. 결함 중 일부는 완전한 사고가 아닐 수 있습니다.
Christopher Bibbs 2016 년

@maple_shaft-단일 클라이언트 만있는 경우 해결책은 간단합니다. 잔액이 $ 0이 아닌 한 해당 프로그램에 업데이트를 제공하지 마십시오.
Ramhound

1

시스템이 내부적으로 호스팅되므로 원격 서버와의 통신과 관련하여 위에서 언급 한 많은 솔루션이 작동하지 않을 수 있습니다.

대신 만료 날짜가 포함 된 라이센스 파일을 프로젝트에 포함시키지 마십시오. 시스템 시계가 만료 날짜를 초과하면 시스템 작동이 중지됩니다. 파일을 보호하려면 조작을 방지하기 위해 내용을 암호화하십시오. 사용자가 비용을 지불하거나 1 년 더 연장하면 새 라이센스 파일을 보냅니다.

PHP를 사용하는 경우 사용자가 코드를 쉽게 편집 할 수 있으므로 어떤 종류의 보안을 적용하더라도 사용자는 쉽게 들어가서 제거 할 수 있습니다. ASP.NET 또는 다른 컴파일 된 언어를 사용하는 경우 코드를 수정할 수 없으므로 걱정할 필요가 없습니다.


이것은 좋은 제안이지만 패키지되고 배포 된 Java 응용 프로그램입니다. 새 라이센스 파일을 제공한다는 것은 라이센스 파일을 WAR 파일에 올바르게 삽입하거나 모든 사람에게 성가 시게 할 완전히 새로운 WAR 파일을 제공하도록 신뢰한다는 의미입니다. 여기에는 제 3 자 응용 프로그램의 새로운 릴리스가있을 때마다 참여하여 조직 내에서 자신의 존재를 정당화해야하는 많은 수의 서류와 여러 IT 직원이 있습니다. 나는 그것이 가장 불쾌한 제안 일 수 있다는 귀하의 제안을 무시하지 않습니다.
maple_shaft

java와 같은 대부분의 컴파일 된 언어에서도 jar를 쉽게 컴파일, 업데이트, 재 컴파일 한 다음 전쟁에 포함시킬 수 있다고 생각합니다. 어떻게 처리합니까?
Sudarshan

1

(공개- 라이센스 관리자 시스템 제공 업체 인 Agilis Software에서 근무 합니다).

가장 효과적인 솔루션은 라이센스 임대와 함께 자동 제품 활성화를 사용하는 것입니다. 즉시 사용할 수있는 기능은 다음과 같습니다.

  • 고객의 라이센스를 자동으로 활성화합니다. 활성화시 각 인스턴스는 대상 시스템의 선택한 매개 변수에 자동으로 잠기 며, 설정된 인스턴스에 대해 라이센스 제한이 적용됩니다 (예 : 기능 구성, 전체 평가판 또는 구독 시간 제한 설정).
  • 하나의 활성화 이벤트의 최대 유효 기간 인 '임대 간격'을 설정하십시오. 신용이 의심되는 고객의 경우이를 2 주로 설정할 수 있습니다. 즉, 2 주마다 앱이 백그라운드에서 자동으로 전화를 걸어 라이센스를 다시 확인합니다. 지불 기한이 지났 으면 호스팅 된 서버에서 라이센스를 비활성화 할 수 있으며 다음 전화 홈에서 실행이 중지됩니다.
  • 대상 시스템에서 네트워크 연결이없는 경우 모든 웹 터미널에서 암호화 된 파일을 교환하여 사용자 셀프 서비스 활성화 프로세스가 있습니다. 사용자가이 위치에있는 경우 임대료 간격을 더 길게하여 지불해야하는 불편 함과 불편 함의 균형을 맞출 수 있습니다. 그들이 지불 한 후에는 원하는만큼 임대 간격을 영구적으로 만들 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.