Giải pháp khóa giấy phép trong ứng dụng web, cách tiếp cận tốt nhất là gì?


14

Tôi bị bối rối bởi một yêu cầu từ người quản lý của tôi. Tôi làm việc cho một công ty khởi nghiệp nhỏ và chúng tôi đã phát triển một ứng dụng web với tỷ lệ cố định với một thỏa thuận bảo trì cho một công ty lớn hơn NHIỀU. Biết những câu chuyện kinh dị về việc các công ty lớn sẽ chỉ thanh toán hóa đơn của họ đến giây cuối cùng, chúng tôi quyết định rằng chúng tôi muốn tự bảo vệ mình bằng cách có thể cấp phép cho ứng dụng web này theo cách mà nếu chúng tôi không được trả tiền thì phần mềm không còn hoạt động.

Tôi đã thấy điều này được thực hiện trước đây cho các ứng dụng máy tính để bàn tuy nhiên đây sẽ là một ứng dụng web mà chúng sẽ lưu trữ nội bộ và sẽ không thể truy cập được từ Internet.

Cách tiếp cận tốt nhất để làm điều này là gì, chúng tôi muốn nó có một dấu chân nhỏ và muốn khả năng gia hạn mã bản quyền mà họ đã phân phối.

Có ai đã làm một cái gì đó tương tự? Có phải chúng ta hoàn toàn mất trí? Có ai có bất cứ đề nghị tốt hơn?


Để làm điều này đúng cách, bạn sẽ cần RẤT NHIỀU thời gian (hoặc họ sẽ chỉ phá vỡ nó). Nó rẻ hơn nhiều chỉ cần mua một sản phẩm được thiết kế để bảo vệ các chương trình java. Mặt khác, chỉ cần tạo giấy phép một đoạn mã byte java mà chương trình đọc và sau đó hành động upton.

Đó là những gì tôi sợ, tôi sẽ xem xét các giải pháp của bên thứ ba tuy nhiên chúng tôi đã quá đau khổ.
maple_shaft

Sau đó, chỉ cần làm cho nó đi chậm một cách đau đớn 2 tuần sau khi thanh toán đến hạn.

@ Thorbjørn, LOL !! ^ _ ^ Hấp dẫn như dự án này là một nhà lãnh đạo thua lỗ để cố gắng và kết thúc việc kinh doanh bổ sung với công ty này. CHẤT LƯỢNG CAO NHẤT có tầm quan trọng NHẤT. Đồng thời chúng tôi không muốn bị vặn hoàn toàn trong khi chúng tôi đang tìm kiếm nồi mật ong.
maple_shaft

@maple, nghe có vẻ là một kế hoạch kinh doanh tồi. Sau đó, để lại tiền thu thập cho kế toán và không xem xét việc cung cấp phần mềm độc hại.

Câu trả lời:


9

Có nhiều cách để thực hiện một cái gì đó như thế này, nhưng đây là một cách không quá khó để thực hiện:

Bạn cần một trang web có sẵn công khai ở đâu đó lưu trữ một tệp chứa băm các khóa cấp phép đã được đưa vào danh sách đen. Cách bạn quản lý tệp này tùy thuộc vào bạn, nhưng bản thân tệp chỉ cần có hàm băm trên mỗi dòng.

Sau đó, trên cơ sở định kỳ, phần mềm của bạn sẽ bắt đầu tải xuống tệp này (hầu hết các ngôn ngữ phía máy chủ cung cấp cho điều này) và sau đó tìm kiếm nó để băm của khóa cấp phép đã cài đặt. Nếu nó được tìm thấy, thì ứng dụng biết rằng nó sẽ chết cho đến khi danh sách đen được xóa.

MD5 hoặc tương tự cộng với một bí mật là đủ cho việc này. Bạn có thể nhận được fancier và yêu cầu ứng dụng gửi yêu cầu đến trang web của bạn và bạn tìm nó trong cơ sở dữ liệu một cách nhanh chóng, nhưng tệp (với những gì tôi cho là hy vọng sẽ là một danh sách ngắn) hy vọng sẽ còn nhỏ và có thể cách dễ nhất.

Phần khó hơn sẽ là giữ cho ứng dụng chết. Rốt cuộc, bạn đã lưu trữ nội dung này ở đâu đó bên trong, điều đó có nghĩa là nếu nó quá rõ ràng, nó có thể dễ dàng bị phá hủy và ngay cả khi nó không quá rõ ràng, nó có thể dễ dàng được hoàn nguyên bằng cách khôi phục (các) bảng thích hợp / các tập tin). Vì vậy, tôi đề nghị một phương pháp bảo vệ thứ hai là tốt.

Phương pháp này sẽ lưu trữ "TRỰC TIẾP" hoặc "CHẾT" (hoặc một cái gì đó đủ tương tự) trong một bảng hoặc một tệp, nhưng một lần nữa HASHed. Điều này cần phải được băm với muối của bạn VÀ dấu thời gian. Mỗi khi một trang trên ứng dụng của bạn chạy, hãy kiểm tra giá trị này bằng phiên bản băm "LIVE" + salt + dấu thời gian và sau đó cho phép một phạm vi dấu thời gian hợp lệ (ví dụ: một ngày, hai ngày, một tuần, một tháng, v.v. Hãy nhớ rằng phạm vi càng lớn, hiệu suất sẽ càng khó hơn.). Miễn là mọi thứ khớp (hoặc một trận đấu được tìm thấy), ứng dụng vẫn còn sống; mặt khác, ngay cả khi giá trị trong tệp hoặc bảng đặc biệt là "TRỰC TIẾP", nó vẫn sẽ bị chết nếu có nỗ lực khôi phục từ bản sao lưu vì dấu thời gian sẽ nằm ngoài ngưỡng của bạn.

Tóm lại (điều này giả định rằng bạn có một số phương pháp kiểm tra tính hợp lệ của khóa cấp phép, chẳng hạn như một số loại tổng kiểm tra hoặc phương pháp khác):

  • Danh sách kiểm tra
    • Chuyển đổi Key License thành băm với muối
    • Yêu cầu tập tin danh sách đen từ máy chủ
    • Là băm của tôi trong tập tin?
    • Nếu CÓ, sau đó lưu trữ hàm băm của "CHẾT" + muối + dấu thời gian (cắt ngắn đến ngày; không cần lưu trữ giờ + ngày + phút)
    • Nếu KHÔNG, thì lưu trữ hàm băm của "LIVE" + salt + dấu thời gian (trunc'd)
  • IsKeyAlive
    • Tạo hàm băm từ dấu thời gian "LIVE" + salt + trunc'd
    • Tải hàm băm DeadAlive
    • Họ có đồng ý không?
    • Nếu CÓ, thì chúng ta còn sống; trả lại ĐÚNG.
    • Nếu KHÔNG, thì chúng ta có thể đã chết, nhưng chúng ta vẫn có thể ở trong cửa sổ dấu thời gian của mình:
      • Trừ một ngày từ dấu thời gian và lặp lại băm.
      • Bây giờ chúng ta có đồng ý không?
      • ĐÚNG? Trả lại ĐÚNG
      • Thêm một ngày vào dấu thời gian và lặp lại hàm băm
      • Bây giờ chúng ta có đồng ý không?
      • ĐÚNG? Trả lại ĐÚNG
    • Tại thời điểm này, chúng tôi nằm ngoài phạm vi dấu thời gian không có kết quả khớp. Trả lại SAI. (Tiêu diệt ứng dụng)

Bây giờ, lòng tốt biết có một triệu và một cách điều này có thể thất bại. Xem xét tất cả các cách có thể và xây dựng một hệ thống đáng tin cậy (bao gồm một cách giả định khách hàng là đúng nếu không thể tải xuống tệp danh sách đen). Kiểm tra, kiểm tra, kiểm tra nó và sau đó kiểm tra thêm một số trước khi triển khai, bởi vì nếu nó sai, bạn sẽ mất lòng tin của khách hàng.


+1 Đối với câu trả lời phức tạp về mặt lịch sử O_o. Tôi có thể sai nhưng tôi không nghĩ rằng điều này cần phải khá phức tạp. Tôi không phân phối Microsoft Office, đây là một ứng dụng được xây dựng tùy chỉnh cho một khách hàng. Các vấn đề tương tự vẫn còn ở đây là máy chủ lưu trữ ứng dụng này có thể không thể giao tiếp với một dịch vụ bên ngoài. Tôi không hiểu tại sao mã hóa, băm và muối thực sự cần thiết ở đây. Những gì chúng tôi thực sự muốn là một công tắc tiêu diệt.
maple_shaft

Cảm ơn ;-) Lý do tôi khuyên bạn nên sử dụng hàm băm là để không ai đánh hơi lưu lượng truy cập và / hoặc xem mã / bảng / tệp tại máy khách của bạn có thể cho biết điều gì đang xảy ra trên thế giới. Băm có nghĩa là không có gì nếu không có cả hai bên tham gia và khách hàng không thể biết rằng hàm băm thực sự là một đại diện của khóa cấp phép của họ. (Nếu nó được truyền đi rõ ràng, họ sẽ biết ngay.) Tương tự như vậy, nó sẽ giảm nhu cầu thực hiện bất kỳ mã hóa hoặc SSL nào trên tệp danh sách đen của bạn - bản thân hàm băm có nghĩa là zip.
Kerri Shotts

Lưu ý bên lề: nếu bạn tin tưởng rằng máy khách sẽ nhận thấy rằng việc khôi phục một số bảng / tệp nhất định là quá khó, bạn có thể giảm độ phức tạp khá nhiều bằng cách xóa kiểm tra mỗi khi ứng dụng chạy. Điều đó nói rằng, sẽ không mất một ai đó quá lâu để tìm hiểu những gì đang xảy ra và tìm cách xung quanh nó.
Kerri Shotts

1
CheckBlacklist: license-server.example.com: no route to hostBây giờ thì sao? Máy chủ cấp phép thậm chí có thể không tồn tại đôi khi trong tương lai - và đừng nói với tôi rằng công ty của bạn sẽ vẫn tồn tại sau hai mươi năm nữa, điều đó khá khó khăn về mặt thống kê.
Piskvor

1
Có rất nhiều cách để khắc phục điều này, bao gồm cả việc không sử dụng máy chủ của riêng bạn. Sử dụng Amazon hoặc Google hoặc một cái gì đó tương tự. Ngoài ra, xây dựng "tin tưởng" vào kiểm tra để nếu máy chủ bị chết, người dùng có thể tiếp tục sử dụng ứng dụng. Như tôi đã đề cập trong bài đăng, có hàng triệu cách nó có thể thất bại, và đó thực sự là lý do tại sao tôi chống lại loại kiểm tra này. Tôi thà tin tưởng khách hàng của mình hơn là đưa ra loại kiểm tra này. (Bản thân một mã bản quyền, tôi sẽ sử dụng. Nhưng có nằm trong danh sách đen không? Không đáng để bỏ công sức, IMO.)
Kerri Shotts

4

Các câu trả lời khác đã thực hiện một công việc tốt là bao gồm các khía cạnh kỹ thuật. Nhưng cũng xin xem xét khía cạnh pháp lý.

Bạn thậm chí có quyền chặn ứng dụng của họ nếu họ không trả tiền không? Nếu bạn không đề cập đến vấn đề này trong hợp đồng, bạn có thể không có quyền làm điều đó, ngay cả khi các khoản thanh toán mất hiệu lực (như bạn không nhất thiết có quyền lấy lại thứ bạn đã bán). Ngoài ra, nhiều quốc gia có luật đặc biệt cấm "thao túng các chương trình máy tính" - những gì bạn làm có thể được coi là như vậy và thậm chí có thể khiến bạn phải chịu trách nhiệm hình sự.

Vì vậy, tôi khuyên bạn nên thảo luận vấn đề này với luật sư trước, để tránh cho mình vào nước nóng.

Cuối cùng, có lẽ tốt hơn là chỉ dựa vào hệ thống pháp lý. Nếu họ không trả tiền, hãy thương lượng và nếu điều đó không có ích, hãy khởi kiện. Ở nhiều quốc gia, việc kiện là tương đối không đau & rẻ nếu tình hình hợp đồng rõ ràng (ở Đức, ví dụ: bạn có thể nhận được Mahnbescheid với giá dưới 20 €).


Đây là loại quan hệ để trả lời câu hỏi của tôi về việc nếu chúng ta là người dở hơi. Tôi có ấn tượng riêng biệt mặc dù tôi không có lựa chọn nào khác và đây là điều mà cấp trên của tôi khăng khăng mặc dù nó không có trong hợp đồng. Thật không may, tôi sống và làm việc ở Mỹ, nơi bạn không thể tham gia vào một tập đoàn lớn ngay cả khi bạn đúng. Họ có đội quân luật sư sẽ chôn vùi mọi thứ trong giấy tờ đủ lâu để đưa chúng tôi ra khỏi doanh nghiệp nếu họ thực sự muốn.
maple_shaft

Tôi đồng ý với @sleske về việc sử dụng các kênh hợp pháp. Hãy chắc chắn rằng hợp đồng là hợp lý, và sau đó kiện họ nếu họ vi phạm các điều khoản. Hoặc ít nhất là dọa kiện. Trong những gì tôi thấy về các công ty lớn, họ rất sẵn lòng trả tiền cho các nhà cung cấp để tránh bị kiện hoặc vi phạm hợp đồng.
RationalGeek

@maple_shaft: Không biết gì về tình hình pháp lý ở Hoa Kỳ, nhưng tôi hy vọng tình hình pháp lý không vô vọng như bạn vẽ. Dù sao, nếu bạn được yêu cầu thực hiện điều này, tôi sẽ chỉ ra những vấn đề tiềm ẩn. Nếu bạn vẫn đi trước (bằng văn bản, tất nhiên), bạn đã làm tất cả những gì bạn có thể.
sleske

Sẽ không có vấn đề gì khi có một hệ thống cấp phép giới hạn thời gian trong đó một khi giấy phép hết hạn ứng dụng là vô ích. Rất nhiều công ty làm điều đó, lớn và nhỏ - Adobe là một ví dụ.
James Snell

2

Nếu họ đang lưu trữ nội bộ, thì nó khác với bất kỳ phần mềm nào khác mà bạn có thể gửi chúng? Chỉ ra những gì bạn sẽ làm nếu bạn đang vận chuyển, giả sử, một ứng dụng hiển thị khoảng không quảng cáo trên máy tính để bàn và làm điều đó.


Tôi đoán tôi chỉ bối rối về những gì để làm nói chung. Tôi tưởng tượng rằng ứng dụng nên kiểm tra hàng đêm đối với khóa giấy phép của nó bằng cách gửi yêu cầu đến một máy chủ web bên ngoài có số giấy phép. Phản hồi sẽ thành công hay thất bại và sẽ được lưu trữ trong một biến mức ngữ cảnh ứng dụng. Ứng dụng về cơ bản sẽ "tắt" nếu khóa cấp phép không hợp lệ. Bằng cách này, chúng tôi có thể chỉ cần "vô hiệu hóa" số giấy phép này nếu cần.
maple_shaft

Bạn có nghĩ rằng trang xác thực giấy phép đơn giản này phải được mã hóa SSL không? Ngay cả khi ai đó thực hiện gói sniffer và có thể lấy được số giấy phép hợp lệ, họ sẽ cần phải có một bản sao phân tán của ứng dụng cho nó hữu ích, và thậm chí sau đó nó được xây dựng rất có mục đích. Tôi không thể tưởng tượng nó hữu ích cho bất kỳ ai khác ngoài khách hàng trực tiếp của tôi.
maple_shaft

1

Nó phụ thuộc vào hệ thống. Bạn đã mở rộng một khung hiện có như Magneto hay bạn đã viết toàn bộ ứng dụng từ đầu? Nếu đó là sau này, xây dựng trong một yêu cầu cấp phép không quá khó. Bạn chỉ cần cung cấp ứng dụng với một giấy phép ngắn hạn, một trong đó hết hạn 45 ngày sau khi bạn lập hóa đơn và sau đó cung cấp một cái vĩnh viễn sau đó.

Điều này giả định rằng bạn cũng không chuyển qua nguồn. :)


Chúng tôi không chuyển qua nguồn. Chúng tôi sẽ kiểm soát mã nguồn và phân phối các bản phát hành thường xuyên và sửa lỗi khi cần.
maple_shaft

1
@maple_shaft: Chà, luôn có khả năng từ chối phát hành bất kỳ bản sửa lỗi hoặc cập nhật nào cho đến khi hóa đơn được thanh toán, vì tôi nghi ngờ việc bảo trì được tích hợp trong giao dịch mua ban đầu hoặc được bán như một điều liên tục, với ngày thanh toán thông thường ( thông thường, nhưng không phải luôn luôn, hàng năm).
Vatine

Để theo dõi trên @Vatine, Đối với các dự án trước đó thiếu giấy phép mạnh mẽ, chúng tôi đã sử dụng các khiếm khuyết làm điểm đòn bẩy để trích xuất thanh toán. Một số khiếm khuyết có thể không phải là tai nạn hoàn toàn.
Christopher Bibbs

@maple_shaft - Nếu bạn chỉ có một khách hàng. Giải pháp rất đơn giản. Không cung cấp cập nhật cho chương trình đã nói trừ khi số dư của họ là $ 0.
Ramhound

1

Cho rằng hệ thống được lưu trữ nội bộ, nhiều giải pháp được đề cập ở trên liên quan đến việc giao tiếp với máy chủ từ xa có thể không hoạt động.

Tại sao không thay vào đó bao gồm một tệp giấy phép trong dự án bao gồm ngày hết hạn. Khi đồng hồ hệ thống vượt quá thời hạn sử dụng, hệ thống sẽ ngừng hoạt động. Để bảo mật tệp, mã hóa nội dung để tránh giả mạo. Khi người dùng trả tiền, hoặc gia hạn thêm một năm, bạn gửi cho họ một tệp giấy phép mới.

Lưu ý rằng nếu bạn đang sử dụng PHP, mã có sẵn để người dùng chỉnh sửa, do đó, cho dù bạn đặt loại bảo mật nào, người dùng có thể dễ dàng truy cập và gỡ bỏ nó. Nếu bạn đang sử dụng ASP.NET hoặc một số ngôn ngữ được biên dịch khác, đây không phải là vấn đề đáng lo ngại vì mã không thể được sửa đổi.


Đây là một gợi ý tốt nhưng nó là một ứng dụng Java được đóng gói và triển khai. Cung cấp cho họ một tệp giấy phép mới có nghĩa là tin tưởng họ chèn chính xác vào tệp WAR hoặc cung cấp cho họ một tệp WAR hoàn toàn mới sẽ gây khó chịu cho mọi người. Họ có hàng núi giấy tờ và nhiều người CNTT cần chứng minh sự tồn tại của họ trong tổ chức của họ bằng cách tham gia bất cứ khi nào có bản phát hành mới của ứng dụng bên thứ ba. Tôi không hạ thấp đề nghị của bạn chỉ rằng nó có thể là đề xuất ít gây khó chịu nhất.
maple_shaft

Tôi đoán ngay cả với hầu hết các ngôn ngữ được biên dịch như java, một jar có thể dễ dàng được biên dịch, cập nhật, biên dịch lại và sau đó được đưa vào cuộc chiến, vậy làm thế nào để xử lý nó?
Sudarshan

1

(Tiết lộ - Tôi làm việc cho Agilis Software, nhà cung cấp hệ thống quản lý giấy phép ).

Giải pháp hiệu quả nhất là sử dụng kích hoạt sản phẩm tự động với hợp đồng thuê giấy phép. Ra khỏi hộp này cho phép bạn:

  • Tự động kích hoạt (các) giấy phép của khách hàng. Tại thời điểm kích hoạt, mỗi phiên bản sẽ tự động bị khóa đối với các tham số bạn đã chọn của hệ thống đích và các giới hạn giấy phép bạn thiết lập cho chúng sẽ được áp dụng trên ứng dụng của bạn (ví dụ: định cấu hình các tính năng, đặt giới hạn thời gian dùng thử hoặc đăng ký chung).
  • Đặt 'thời gian thuê', là khoảng thời gian hiệu lực tối đa của bất kỳ một sự kiện kích hoạt nào. Đối với những khách hàng có tín dụng nghi ngờ, bạn có thể đặt điều này thành hai tuần, điều đó có nghĩa là cứ sau hai tuần, ứng dụng của bạn sẽ tự động 'điện thoại về nhà' trong nền để xác nhận lại giấy phép. Nếu họ quá hạn thanh toán, bạn có thể vô hiệu hóa giấy phép của họ trong máy chủ được lưu trữ và nó sẽ ngừng chạy trên điện thoại nhà tiếp theo.
  • Nếu không có kết nối mạng từ hệ thống đích, có quá trình kích hoạt tự phục vụ người dùng thông qua trao đổi các tệp được mã hóa tại bất kỳ thiết bị đầu cuối web nào. Nếu người dùng của bạn ở vị trí này thì bạn có thể muốn làm cho khoảng thời gian thuê dài hơn để cân bằng sự bất tiện cho họ với nhu cầu của bạn để được thanh toán. Một khi họ trả tiền, bạn có thể thực hiện khoảng thời gian thuê bao lâu tùy thích, lên đến vĩnh viễn.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.