在我的ASP.NET应用程序中强制执行许可条款

在我的ASP.NET应用程序中强制执行许可条款,asp.net,licensing,Asp.net,Licensing,我有一个ASP.Net应用程序,它托管在公司客户机内部网络的web服务器上 我希望强制执行各种已知的许可条款(到期日/用户数量等) 我计划使用一个加密的xml文档,其中包含作为密钥/值对的术语,并将其作为加密的平面文本文件存储在web服务器上 然后,我计划使用一个自定义安全性Httpmodule来解密加密文件 然后在应用程序相关区域的每个页面请求期间强制执行这些条款 有没有更好的方法来强制执行web应用程序的许可条款?我选择了另一种方法:我只是将许可信息放在数据库的加密字段中,这样我就不必担心H

我有一个ASP.Net应用程序,它托管在公司客户机内部网络的web服务器上

我希望强制执行各种已知的许可条款(到期日/用户数量等)

我计划使用一个加密的xml文档,其中包含作为密钥/值对的术语,并将其作为加密的平面文本文件存储在web服务器上

然后,我计划使用一个自定义安全性Httpmodule来解密加密文件 然后在应用程序相关区域的每个页面请求期间强制执行这些条款


有没有更好的方法来强制执行web应用程序的许可条款?

我选择了另一种方法:我只是将许可信息放在数据库的加密字段中,这样我就不必担心Httpmodule了。SQL Server具有EncryptByKey和DecryptByKey函数,使获取/放置加密数据变得非常容易。我还使用了一个简单的密码密钥,使整个过程非常易于管理。我欣赏你的方法——这真的很聪明——但我认为你让自己的生活有点太艰难了

就安全性而言,只要您没有实际提供源代码,这是相对安全的。唯一的缺点是,他们可能会反汇编您的代码,试图提取密码短语或其他加密技术(您的Httpmodule方法也可能如此)。然而,我并不担心这一点,因为我主要与《财富》500强企业合作,我与它们签订了一项法律协议,其中包括“禁止拆卸”条款。绝大多数公司根本不会冒险,因为这样做只是为了获得一些额外的功能或扩展他们的数据库,而可能会招致法律风险。另一方面,如果你正在分发给成千上万的匿名用户,情况可能就不同了


更新:如果您不使用SQL Server,还可以使用某种形式的基于代码的加密来保存/检索许可信息。如果你需要一个加密类,我上传了一个简单但非常强大的AES类作为一个加密类。

我选择了一个不同的路径:我只是将许可信息放在数据库中的一个加密字段中,这样我就不必担心Httpmodule了。SQL Server具有EncryptByKey和DecryptByKey函数,使获取/放置加密数据变得非常容易。我还使用了一个简单的密码密钥,使整个过程非常易于管理。我欣赏你的方法——这真的很聪明——但我认为你让自己的生活有点太艰难了

就安全性而言,只要您没有实际提供源代码,这是相对安全的。唯一的缺点是,他们可能会反汇编您的代码,试图提取密码短语或其他加密技术(您的Httpmodule方法也可能如此)。然而,我并不担心这一点,因为我主要与《财富》500强企业合作,我与它们签订了一项法律协议,其中包括“禁止拆卸”条款。绝大多数公司根本不会冒险,因为这样做只是为了获得一些额外的功能或扩展他们的数据库,而可能会招致法律风险。另一方面,如果你正在分发给成千上万的匿名用户,情况可能就不同了


更新:如果您不使用SQL Server,还可以使用某种形式的基于代码的加密来保存/检索许可信息。如果您需要加密类,我上传了一个简单但非常强大的AES类。

因此加密的xml文件将放在客户Web服务器上,并且每次内部公司用户访问网站时都会进行许可证检查?这是正确的。还是每n个请求?所以说每1000次请求/点击。正如马克·布里廷汉姆所评论的那样,这可能是矫枉过正。如果出于某种原因我真的需要检查每一个请求,我宁愿点击一个平面文件而不是数据库?例如,其他术语是(许多“对象”限制…用户可以动态创建/删除对象)。另一个例子是每月会话限制和/或每月最大请求限制。因此,按使用付费模式。因此,加密的xml文件将位于客户Web服务器上,并且每次内部公司用户访问该网站时,都会进行许可证检查?这是正确的。还是每n个请求?所以说每1000次请求/点击。正如马克·布里廷汉姆所评论的那样,这可能是矫枉过正。如果出于某种原因我真的需要检查每一个请求,我宁愿点击一个平面文件而不是数据库?例如,其他术语是(许多“对象”限制…用户可以动态创建/删除对象)。另一个例子是每月会话限制和/或每月最大请求限制。所以是按使用付费模式。谢谢马克。我使用的是Rijndael对称密钥算法。我喜欢AES类的URL友好性。是的-我的设计目标是:A)简单的字符串到字符串的转换和B)URL友好性,因为我需要通过URL发送和接受加密信息。在我的URL处理中,我总是加密日期和时间,这样URL复制就不起作用了。如果你喜欢我的答案,向上投票会有帮助!谢谢你,马克。我使用的是Rijndael对称密钥算法。我喜欢AES类的URL友好性。是的-我的设计目标是:A)简单的字符串到字符串的转换和B)URL友好性,因为我需要通过URL发送和接受加密信息。在我的URL处理中,我总是加密日期和时间,这样URL复制就不起作用了。如果你喜欢我的答案,向上投票会有帮助!