Web uygulamasında lisans anahtarı çözümü, en iyi yaklaşım nedir?


14

Yöneticimden gelen bir istek beni şaşırttı. Küçük bir başlangıç ​​için çalışıyorum ve çok daha büyük bir şirket için bakım anlaşmasıyla sabit bir ücret karşılığında bir web uygulaması geliştirdik. Büyük şirketlerin faturalarını sadece son saniyeye kadar nasıl ödeyecekleri hakkındaki korku hikayelerini bilerek, bu web uygulamasını lisansa sahip olmazsak artık çalışmayacak şekilde lisanslayabilmemiz için kendimizi korumak istediğimize karar verdik.

Daha önce masaüstü uygulamaları için yapıldığını gördüm, ancak bu dahili olarak barındıracakları ve internetten erişilemeyecekleri bir web uygulaması olacak.

Bunu yapmak için en iyi yaklaşım nedir, daha az yer kaplamasını istiyoruz ve dağıttıkları lisans anahtarını yenileme yeteneğini istiyoruz.

Benzer bir şey yapan var mı? Tamamen aklımızın dışında mıyız? Daha iyi bir önerisi olan var mı?


Bunu yapmak için düzgün bir gerekecektir LOT (ya da sadece onu kıracak) zamanın. Java programlarını korumak için tasarlanmış bir ürün satın almak çok daha ucuzdur. Aksi takdirde, lisansı programın okuduğu ve daha sonra çalıştığı bir java bayt kod snippet'i yapın.

Korktuğum şey bu, üçüncü taraf çözümlere bakacağım, ancak zaten acı verici bir şekilde abartılıyız.
maple_shaft

Sonra ödeme bittikten 2 hafta sonra acı yavaş yavaş olun.

@ Thorbjørn, LOL !! ^ _ ^ Bu proje cazip geldiği için bu şirket ile ek iş kurmayı denemek ve kaybetmek için bir liderdir. EN YÜKSEK KALİTE EN ÖNEMLİDİR. Aynı zamanda bal kabını ararken tamamen vidalanmak istemiyoruz.
maple_shaft

@maple, kötü bir iş planı gibi geliyor. Sonra parayı muhasebecilere toplayın ve kötü amaçlı yazılım teslim etmeyi düşünmeyin.

Yanıtlar:


9

Böyle bir şeyi uygulamanın birçok yolu vardır, ancak burada yapılması çok zor olmaması gereken bir yöntem vardır:

Kara listeye alınmış lisans anahtarlarının karmasını içeren bir dosyayı barındıran bir yerde herkese açık bir web sitesine ihtiyacınız var. Bu dosyayı nasıl yöneteceğiniz size bağlıdır, ancak dosyanın her satırında yalnızca bir karması olmalıdır.

Ardından, yinelenen bir şekilde, yazılımınız bu dosyanın indirilmesini başlatır (sunucu tarafı dillerin çoğu bunu sağlar) ve ardından yüklü lisans anahtarının karmasını arar. Eğer bulunursa, uygulama kara liste kaldırılıncaya kadar ölmesi gerektiğini bilir.

Bunun için MD5 veya benzeri bir sır yeterli olmalıdır. Daha meraklı olabilir ve uygulama sitenize isteği göndermek ve anında bir veritabanında aramak, ama dosya (umarım kısa bir liste olacağını varsayalım) umarım küçük kalır ve olabilir en kolay yol.

Zor kısmı uygulamayı ölü tutacak. Sonuçta, bunu dahili olarak bir yerde saklamalısınız, yani kolayca açık bir şekilde alt üst edilebilirse ve aşırı açık olmasa bile, uygun tabloları geri yükleyerek kolayca geri döndürülebilir / Dosyalar). Bu nedenle ikinci bir koruma yöntemi de öneririm.

Bu yöntem, "LIVE" veya "DEAD" (veya yeterince benzer bir şeyi) bir tabloda veya dosyada depolar, ancak yine HASHed olur. Bunun tuz ve zaman damgası ile karıştırılması gerekir. Uygulamanızdaki bir sayfa her çalıştığında, bu değeri karma "LIVE" + tuz + zaman damgası sürümüyle kontrol edin ve ardından geçerli bir zaman damgası aralığına izin verin (örneğin, bir gün, iki gün, bir hafta, bir ay, vb.). Daha yüksek performansın isabet alacağı aralık büyüdükçe unutmayın.). Şeyler eşleştiği sürece (veya bir eşleşme bulunur), uygulama canlıdır; aksi halde, özel dosya veya tablodaki değer "CANLI" olsa bile, zaman damgası eşik değerinizin dışına çıkacağından yedeklemeden geri yükleme denemesi varsa yine de ölecektir.

Özetle (bu, bir tür sağlama toplamı veya başka bir yöntem gibi bir lisans anahtarının geçerliliğini kontrol etmek için programlı bir yönteminiz olduğunu varsayar ):

  • CheckBlacklist
    • Lisans Anahtarını tuz ile karmaya dönüştürme
    • Sunucudan kara liste dosyası isteme
    • Hashim dosyada mı?
    • EVET ise, "DEAD" + tuz + zaman damgasının karmasını saklayın (güne kısaltılır; saat + gün + dakika depolamaya gerek yoktur)
    • HAYIR ise, karma "LIVE" + tuz + zaman damgasını saklayın (kesilmiş)
  • IsKeyAlive
    • "LIVE" + tuz + kısaltılmış zaman damgasından karma oluşturun
    • DeadAlive karmasını yükle
    • Katılıyorlar mı?
    • EVET ise, o zaman yaşıyoruz; TRUE değerini döndür.
    • HAYIR ise, muhtemelen ölmüş oluruz, ancak yine de zaman damgası penceremizin içinde olabiliriz:
      • Zaman damgasından bir gün çıkarın ve karmayı tekrarlayın.
      • Şimdi katılıyor muyuz?
      • EVET? Dönüş TRUE
      • Zaman damgasına bir gün ekleyin ve karmayı tekrarlayın
      • Şimdi katılıyor muyuz?
      • EVET? Dönüş TRUE
    • Bu noktada, eşleşme olmadan zaman damgası aralığının dışındayız. FALSE döndür. (Uygulamayı öldür)

Şimdi, iyilik bunun başarısız olabileceği bir milyon ve bir yol olduğunu biliyor. Olası tüm yolları düşünün ve güvenilir bir sistem oluşturun (kara liste dosyası indirilemiyorsa istemcinin doğru olduğunu varsayan sistem dahil). Dağıtmadan önce test edin, test edin, test edin ve sonra biraz daha test edin, çünkü yanlış giderse müşterinizin güvenini kaybedersiniz.


+1 Epik olarak karmaşık bir cevap için O_o. Yanılıyor olabilirim ama bunun bu kadar karmaşık olması gerektiğini düşünmüyorum. Microsoft Office dağıtmıyorum, bu tek bir istemci için özel olarak oluşturulmuş bir uygulama. Aynı sorunlar, bu uygulamayı barındıran sunucunun harici bir hizmetle iletişim kuramayabileceği aynı sorunlar olmaya devam etmektedir. Şifreleme, karma ve tuzların burada neden gerçekten gerekli olduğunu anlamıyorum. Gerçekten istediğimiz etkili bir öldürme anahtarıdır.
maple_shaft

Teşekkürler ;-) Bir karma kullanarak önermek nedeni trafik koklama ve / veya kod / tabloları / dosyaları müşterinize bakarak kimse dünyada neler olduğunu söyleyemez. Hashes, her iki tarafın da içinde olmadığı hiçbir şey ifade etmez ve müşterinin, karma işleminin aslında lisans anahtarının bir temsili olduğunu kavraması pek olası değildir. (Açık bir şekilde iletildiyse, derhal bilirler.) Aynı şekilde kara liste dosyanızda herhangi bir şifreleme veya SSL yapma ihtiyacını azaltır - karma değerler kendiliğinden zip anlamına gelir.
Kerri Shotts

Yan not: istemcinin belirli tabloların / dosyaların geri yüklenmesinin çok zor olduğunu algılayacağına inanıyorsanız, uygulama her çalıştırıldığında kontrolü kaldırarak karmaşıklığı biraz azaltabilirsiniz. Bununla birlikte, neler olup bittiğini anlamanın ve onun etrafında bir yol bulmanın çok uzun sürmeyeceğini söyledi.
Kerri Shotts

1
CheckBlacklist: license-server.example.com: no route to hostŞimdi ne olacak? Lisans sunucusu gelecekte bir süre bile var olmayabilir ve bana şirketinizin yirmi yıl içinde hala hayatta kalacağını söylemeyin , bu istatistiksel olarak imkansızdır.
Piskvor binadan ayrıldı

1
Kendi sunucularınızı kullanmamanız da dahil olmak üzere, bunu aşmanın birçok yolu vardır. Amazon veya Google veya bunun gibi bir şey kullanın. Alternatif olarak, ana bilgisayar ölü kullanıcılar uygulamayı kullanmaya devam edebilmeleri için çek için "güven" oluşturun. Postada belirttiğim gibi, başarısız olabileceği milyonlarca yol var ve bu yüzden bu tür kontrole karşıyım. Bu tür çeklerle karşılaşmaktan ziyade müşterilerime güvenmeyi tercih ederim. (Kendi başına bir lisans anahtarı, ben giderim Ama IMO, Değil çabaya değer onu kara listeye.?.)
Kerri Shotts

4

Diğer cevaplar zaten teknik tarafı kapsayan iyi bir iş çıkardı. Ancak lütfen yasal tarafı da göz önünde bulundurun.

Ödeme yapmazlarsa uygulamalarını engelleme hakkınız bile var mı? Sözleşmede bunu daha önce belirtmediyseniz, ödemeler geçse bile (örneğin, sattığınız bir şeyi yeniden reddetme hakkına sahip değilseniz) bunu yapma hakkınız olmayabilir. Ne yapmak - Ayrıca, birçok ülkede "bilgisayar programlarının manipülasyon" yasaklayan özel yasaları var olabilir gibi düşünülebilir ve hatta cezai sorumluluk maruz kalabilirsiniz.

Bu yüzden önce kendinizi sıcak suya sokmamak için bunu bir avukatla görüşmenizi tavsiye ederim.

Sonunda, sadece yasal sisteme güvenmek daha iyi olabilir. Eğer ödeme yapmazlar, müzakere ederler ve bu yardımcı olmazsa, sadece dava açın. Birçok ülkede, sözleşme durumu açıksa dava açmak nispeten acısız ve ucuzdur (Almanya'da örneğin 20 € 'dan daha az bir Mahnbescheid alabilirsiniz ).


Bu tür bir ceviz olup olmadığımla ilgili sorumu yanıtlamakla bağlanıyor. Başka seçeneğim olmadığı halde farklı bir izlenim edindim ve bu, sözleşmemde olmasa da üstlerimin ısrarcı olduğu bir şey. Maalesef, haklı olsanız bile büyük bir şirketi alamayacağınız ABD'de yaşıyorum ve çalışıyorum. Gerçekten istedikleri takdirde bizi işten çıkaracak kadar uzun evrak işlerini gömecek avukat ordularına sahipler.
maple_shaft

Hukuk kanallarını kullanma konusunda @sleske ile hemfikirim. Sözleşmenin sağlıklı olduğundan emin olun ve şartları ihlal ederse dava edin. Ya da en azından dava etmekle tehdit etmek. Büyük şirketlerde gördüklerimde, dava edilmekten veya bir sözleşmeyi ihlal etmekten kaçınmak için satıcılara ödeme yapmaya çok istekli.
RationalGeek

@maple_shaft: ABD'deki yasal durum hakkında hiçbir fikrim yok, ama umarım yasal durum boyadığınız kadar umutsuz değildir. Her neyse, bunu uygulamanız söylendi, ben sadece potansiyel sorunları işaret ediyorum. Hala devam ederseniz (elbette yazılı olarak) elinizden gelen her şeyi yaptınız.
sleske

Lisansın süresi dolduğunda uygulamanın yararsız olduğu zaman sınırlı bir lisanslama sistemine sahip olmakta sorun olmaz. Büyük ve küçük birçok şirket bunu yapıyor - Adobe bir örnek.
James Snell

2

Dahili olarak barındırılıyorlarsa, bunları gönderebileceğiniz diğer yazılımlardan nasıl farklıdır? Bir masaüstü envanter görüntüleme uygulaması gönderiyorsanız ne yapacağınızı öğrenin ve bunu yapın.


Sanırım genel olarak ne yapacağım konusunda kafam karıştı. Uygulamanın lisans numarası ile harici bir web sunucusuna istek göndererek lisans anahtarına karşı her gece kontrol yapması gerektiğini düşünüyorum. Yanıt bir başarı veya başarısızlık olacaktır ve uygulama bağlam düzeyi değişkeninde saklanacaktır. Lisans anahtarı geçerli değilse uygulama esas olarak "kapanır". Bu şekilde gerekirse bu lisans numarasını basitçe "geçersiz kılabiliriz".
maple_shaft

Bu basit lisans kimlik doğrulama sayfasının SSL şifreli olması gerektiğini düşünüyor musunuz? Birisi bir paket dinleyicisi uygulasa ve geçerli bir lisans numarası türetebilse bile, uygulamanın yararlı olması için uygulamanın dağıtılmış bir kopyasına sahip olması gerekir ve o zaman bile çok amaçlı inşa edilmiştir. Doğrudan müşterim dışında hiç kimse için yararlı olduğunu düşünemiyorum.
maple_shaft

1

Sisteme bağlıdır. Magneto gibi mevcut bir çerçeveyi genişlettiniz mi veya tüm uygulamayı sıfırdan mı yazdınız? Daha sonra ise, bir lisanslama gereksinimi oluşturmak çok zor değildir. Başvuruyu, faturalandırıldıktan 45 gün sonra süresi dolan ve daha sonra kalıcı bir lisans veren kısa süreli lisansla teslim edersiniz.

Bu, kaynağı da çevirmediğinizi varsayar. :)


Kaynağı tersine çevirmiyoruz. Kaynak kodunu kontrol edeceğiz ve gerektiğinde düzenli sürümleri ve hata düzeltmelerini dağıtacağız.
maple_shaft

1
@maple_shaft: Bakımın ilk satın alma işlemine eklendiğinden veya devam eden bir şey olarak normal ödeme tarihleriyle satıldığından şüphelendiğim için, fatura ödenene kadar herhangi bir düzeltme veya güncelleme yapmayı reddetme olasılığı her zaman vardır ( genellikle, ancak her zaman değil, yıllık).
Vatine

@Vatine'i takip etmek için, Güçlü lisansa sahip olmayan önceki projeler için, kusurları ödeme almak için kaldıraç noktası olarak kullandık. Bazı kusurlar tam bir kaza olmayabilir.
Christopher Bibbs

@maple_shaft - Yalnızca tek bir istemciniz varsa. Çözüm basit. Bakiyesi 0 $ olmadığı sürece, söz konusu program için güncelleme sağlamayın.
Ramhound

1

Sistemin dahili olarak barındırıldığı göz önüne alındığında, yukarıda belirtilen bir uzak sunucu ile iletişim kurulmasını gerektiren çözümlerin çoğu çalışmayabilir.

Bunun yerine, neden son kullanma tarihini içeren bir lisans dosyasını projeye dahil etmiyoruz. Sistem saati son kullanma tarihini aştığında, sistem çalışmayı durdurur. Dosyayı güvence altına almak için kurcalamayı önlemek için içeriği şifreleyin. Kullanıcı ödeme yaptığında veya bir yıl daha yenilediğinde, onlara yeni bir lisans dosyası gönderirsiniz.

PHP kullanıyorsanız, kodun kullanıcının düzenlemesi için hazır olduğunu unutmayın, böylece ne tür bir güvenlik koyarsanız koyun, kullanıcının kolayca girip kaldırabileceğini unutmayın. ASP.NET veya başka bir derlenmiş dil kullanıyorsanız, kod değiştirilemediğinden bu bir sorun oluşturmaz.


Bu iyi bir öneri ancak paketlenmiş ve dağıtılmış bir Java uygulamasıdır. Onlara yeni bir lisans dosyası vermek, onları WAR dosyasına doğru şekilde eklemelerine güvenmek veya onlara herkes için can sıkıcı olacak tamamen yeni bir WAR dosyası vermek anlamına gelir. Bir üçüncü taraf uygulamasının yeni bir sürümü çıktığında işlerine katılarak evrak dağları ve organizasyonlarındaki varlıklarını haklı göstermeleri gereken çok sayıda BT insanı var. Ben sadece en az rahatsız edici öneri olabilir öneri küçümsemek değilim.
maple_shaft

Java gibi birçok derlenmiş dilde bile bir kavanoz kolayca de derlenebilir, güncellenebilir, yeniden derlenebilir ve daha sonra savaşa dahil edilebilir, bu yüzden nasıl ele alınır?
Sudarshan

1

(Açıklama - Lisans yöneticisi sistem sağlayıcısı Agilis Software için çalışıyorum ).

En etkili çözüm, otomatik ürün etkinleştirmesini lisans kiralamasıyla kullanmaktır. Kutunun dışında bu size şunları sağlar:

  • Müşterinin lisanslarını otomatik olarak etkinleştirin. Etkinleştirme zamanında her örnek otomatik olarak hedef sistemin seçtiğiniz parametrelerine kilitlenir ve bunlar için ayarladığınız lisans sınırları uygulamanızda uygulanır (ör. Özellikleri yapılandırma, genel bir deneme sürümü veya abonelik süresi sınırı belirleme).
  • Herhangi bir etkinleştirme etkinliğinin maksimum geçerlilik süresi olan bir 'kiralama aralığı' ayarlayın. Şüpheli kredisi olan müşteriler için bunu iki hafta olarak ayarlayabilirsiniz; bu, uygulamanızın lisansı yeniden doğrulamak için her iki haftada bir uygulamanızın otomatik olarak arka planda "telefona gönderileceği" anlamına gelir. Ödemelerin gecikmesi durumunda, barındırılan sunucuda lisanslarını devre dışı bırakabilirsiniz ve bir sonraki telefon evinde çalışmayı durduracaktır.
  • Hedef sistemden bir ağ bağlantısı yoksa, herhangi bir web terminalinde şifreli dosyaların değişimi yoluyla bir kullanıcı self servis etkinleştirme işlemi vardır. Kullanıcınız bu pozisyonda ise, ödeme zorunluluğunuzla ilgili rahatsızlığı dengelemek için kiralama aralığını uzatmak isteyebilirsiniz. Ödeme yaptıktan sonra, kiralama aralığını istediğiniz kadar kalıcı yapabilirsiniz.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.