2014-10-28 37 views
-1

我正在使用应用程序中的MVCReportViewer向我的用户显示一些发票。默认情况下MVCReportViewer使用iframe嵌入报表。不幸的是,这允许用户查看来源并更改客户ID以查看任何人的发票。这是一个问题。在.net中加密或混淆参数并在SQL中解密

我想知道是否有一种方法可以在将.net中的参数发送给SQL之前加密或混淆参数,然后在查询中解密或还原它。

作为一个说明,数据库数据是由第三方程序创建的,所以我不幸可以不编辑它,只是使用其他一些方法来获取客户。我需要通过客户ID来查找它。所以我依靠客户端和查询解决方案。

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

+0

为什么不生成GUID与发票一起使用,并使用发票ID来验证用户应该能够看到它。用户不太可能猜到发票ID和随机GUID。 – DGibbs 2014-10-28 15:42:42

+0

http://msdn.microsoft.com/en-us/library/ms179331.aspx在SQL Server中加密和解密字段 – MethodMan 2014-10-28 15:43:10

+0

为什么不能让用户登录并根据登录验证客户ID? – Brian 2014-10-28 16:26:30

回答

0

我向MVCReportViewer的创建者报告了这一情况,并且他发布了一个更新来加密4.1中的参数。这就解决了我的问题。

1

我想这样做的唯一途径是建立一个非对称密钥对,给人写(或公共)密钥到C#程序,并存储读取(或私有)密钥在SQL数据库中。

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

如果您使用共享密钥,则内容可以在您的C#进程中解密。如果没关系,那么坚持使用AES,因为它明显更容易理解。

2

我会设置没有匿名访问的SRSS。让用户登录查看他们的发票,只允许他们通过访问控制查看他们的报告。如果他们改变了ID,他们会得到一个拒绝访问错误。

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

你可以将其设置为使用自定义的认证和有它呼吁窗体身份验证在你的web应用程序验证用户接入。通过Membership和Role Privider为每个客户提供一个表单帐户,就像现成的SQL Server会员/角色提供商一样。