我在 ASP.NET MVC 应用程序中有一个表,我希望可以使用 AJAX 对其进行排序(服务器端)和过滤。我希望它在其他地方相当容易使用,并且不想将排序和过滤硬编码到查询表达式中,因此我寻找一种动态构建表达式的方法,我发现最好的方法是使用动态 LINQ 。
来自如下 URL 的用户输入将直接插入到动态Where 或OrderBy 中。
/Orders?sortby=OrderID&order=desc&CustomerName=Microsoft
这将产生两个表达式:
OrderBy("OrderID descending")
Where(@"CustomerName.Contains(""Microsoft"")")
虽然我知道它不会直接扔到数据库中,并且在这里直接插入 SQL 是行不通的,因为它无法反映到属性,而且它是类型安全的等等,但我想知道是否有人比我更有创意无论如何,都可以找到一种利用它的方法。我能想到的一个漏洞是,可以对表中不可见的属性进行排序/过滤,但这并没有那么有害,因为它们仍然不会显示,并且可以通过散列来防止。
我允许直接用户输入的唯一方法是使用 OrderBy 和Where。
只是确定一下,谢谢:)
由于 LINQ to SQL 使用类型安全的数据模型类,因此默认情况下您可以免受 SQL 注入攻击。 LINQ to SQL 将根据基础数据类型自动对值进行编码。
(c)斯科特·古
但是您仍然可以在那里得到“除以零”,因此建议处理所有意外异常并限制有效条目的长度,JIC
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)