我刚刚遇到了一些似乎在将数据库密钥发送到客户端(WebBrowser、Silverlight 等)之前对其进行加密的代码。
为了说明,假设您有一个学生参加课外活动的列表,并定义了他们之间的关系。每次将数据写入 ASPX 页面时,studentID 和 activityID 都会被加密。每次进行写入或修改时,都会将此值发送回服务器、解密并保存到数据库中。
以这种方式公开数据的原因可能是什么?这是正常的做法吗?
如果这种选择性加密是一种好的做法,那么最好的方法是什么?
我刚刚遇到了一些似乎在将数据库密钥发送到客户端(WebBrowser、Silverlight 等)之前对其进行加密的代码。
为了说明,假设您有一个学生参加课外活动的列表,并定义了他们之间的关系。每次将数据写入 ASPX 页面时,studentID 和 activityID 都会被加密。每次进行写入或修改时,都会将此值发送回服务器、解密并保存到数据库中。
以这种方式公开数据的原因可能是什么?这是正常的做法吗?
如果这种选择性加密是一种好的做法,那么最好的方法是什么?
我认为这是一个很好的做法,可以减少那些只想在您的网站上四处寻找安全漏洞的人。我的意思是,如果您的学生 id 是连续数字,并且人们能够在查询字符串中看到他们页面的 id,那么只需增加数字以查看您是否可以访问列表中的下一项或构建脚本就很容易了遍历所有数字。
理想情况下,如果您不希望人们访问这些页面,您将需要一些安全措施来阻止他们访问这些页面。但即使这些信息都是公开的,它也可能会阻止人们编写脚本来遍历所有信息。
我们实际上是在我们的产品中这样做的,因为即使我们对数据项具有安全性,站点管理员也需要确保正确应用安全性,因此我们加密和解密 url 中公开的密钥以使其成为万一管理员不知道他们在做什么而让应该锁定的东西保持打开状态,这会更安全一些。
我喜欢这种易于加密/解密的扩展方法: http ://www.extensionmethod.net/Details.aspx?ID=69
您需要确保对加密值进行 url 编码,因为它们在生成时并不总是对 url 友好。您还可以期望有一些丑陋的 url,例如 5 个字符的密钥将加密为大约 14 个字符的随机查找内容。