在.net中加密或混淆参数并在SQL中解密

时间:2014-10-28 15:40:48

标签: c# asp.net asp.net-mvc-4

我在我的应用程序中使用MVCReportViewer向我的用户显示一些发票。默认情况下,MVCReportViewer使用iframe嵌入报表。不幸的是,这允许用户查看来源并更改客户ID以查看任何其他人的发票。这是一个问题。

我想知道在将其发送到SQL之前是否可以加密或混淆.net中的参数,然后在查询中对其进行解密或恢复。

注意,数据库数据是由第三方程序创建的,所以遗憾的是我不能编辑它,只是使用其他方法来获取客户。我需要通过客户ID查找。所以我依靠客户端和查询解决方案。

MVCReportViewer:https://github.com/ilich/MvcReportViewer

3 个答案:

答案 0 :(得分:2)

我会在没有匿名访问的情况下设置SRSS。让用户登录以查看其发票,并仅允许他们使用访问控制查看其报表。如果他们更改了ID,他们将获得拒绝访问错误。

http://msdn.microsoft.com/en-us/library/bb283249.aspx

您可以将其设置为使用自定义身份验证,并在Web应用程序中调用表单身份验证以验证客户访问权限。通过成员资格和角色权限为每个客户提供表单帐户,例如开箱即用的SQL Server成员资格/角色提供程序。

答案 1 :(得分:1)

我认为这样做的唯一真正方法是建立一个非对称密钥对,为您的C#进程提供写(或公共)密钥,并将读(或私有)密钥存储在SQL数据库中。

然后,您可以使用T-SQL的DECRYPTBYKEY和C#的CryptoServiceProvider(或类似的)来解密密钥。

如果您使用共享密钥,则可以在C#进程中解密内容。如果可以,那么坚持使用AES,因为它很容易理解(IMO)。

答案 2 :(得分:0)

我向MVCReportViewer的创建者报告了这一点,他发布了一个更新以加密4.1中的paremters。所以这解决了我的问题。