使用Dynamic LINQ库(链接),是否容易受到注入?和(如果是的话)如何防止这种情况?
安全注意事项(实体框架)的一些背景知识:
LINQ to Entities注入攻击:
尽管在LINQ to Entities中可以进行查询组合,但它是通过对象模型API执行的.与实体SQL查询不同,LINQ to Entities查询不是使用字符串操作或连接组成的,并且它们不易受传统SQL注入攻击的影响.
由于动态SQL是使用字符串组成的,这意味着它可能容易受到注入向量的影响吗?或者LINQ to SQL会根据Dynamic LINQ库中的基础数据类型自动处理参数化值吗?
或者它是完全安全的,因为动态查询将在内存中执行而不是在SQL上执行(从而否定SQL索引的任何好处)?
我一直在努力理解DynamicLibrary.cs代码,但我确信我可以很容易地忽略一些东西.
由于这个问题是关于动态LINQ库本身,这个问题可以被认为适用于两者linq-to-sql和linq-to-entities(尽管上面引用了实体框架).
我正在寻找一种方法来更改以下代码:
foreach (Contact _contact in contacts)
{
_contact.ID = 0;
_contact.GroupID = 0;
_contact.CompanyID = 0;
}
Run Code Online (Sandbox Code Playgroud)
我想使用LINQ/lambda将其更改为类似于:
contacts.ForEach(c => c.ID = 0; c.GroupID = 0; c.CompanyID = 0);
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用.除了通过编写函数在一行中执行此操作之外,有没有办法在linq foreach中执行多行操作?
我试图从属性的名称在运行时为嵌套属性创建一个lambda表达式.基本上我正在尝试创建由以下指定的lambda表达式:
var expression = CreateExpression<Foo, object>(foo => foo.myBar.name);
private static Expression CreateExpression<TEntity, TReturn>(Expression<Func<TEntity, TReturn>> expression)
{
return (expression as Expression);
}
Run Code Online (Sandbox Code Playgroud)
随着课程:
class Foo
{
public Bar myBar { get; set; }
}
class Bar
{
public string name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是我得到的只是Foo字符串的类型"myBar.name"
如果它是一个普通的属性,例如只需要该值,"myBar"那么我可以使用以下内容:
private static LambdaExpression GetPropertyAccessLambda(Type type, string propertyName)
{
ParameterExpression odataItParameter = Expression.Parameter(type, "$it");
MemberExpression propertyAccess = Expression.Property(odataItParameter, propertyName);
return Expression.Lambda(propertyAccess, odataItParameter);
}
Run Code Online (Sandbox Code Playgroud)
但是,此代码不适用于嵌套属性,我不知道如何创建LambdaExpression来完成工作foo.myBar.name.
我认为这将是这样的:
GetExpression(Expression.Call(GetExpression(Foo, "myBar"), "name")) …Run Code Online (Sandbox Code Playgroud) 对不起,这个可怕的,可怕的问题..但是我没办法不使用VSS.
我希望能够在使用Visual Source Safe 6时在本地使用Git进行分支开发等.我对Git的所有细节的了解目前是有限的,因为我是最近的转换.
问题:
我希望能够在Git存储库中工作.我想这样做,并获得所有这些将允许分支等的好东西.在我的一天结束时,或在其他需要的时刻,我希望能够采取我正在做的任何工作并放置它进入主存储库,然后我将其放入VSS.
理想情况下,在工作日的开始我会得到VSS最新版本..将此提交给Git ..然后在备用分支上工作,当需要提交VSS时将更改重新置于主数据库中.
因为我是一个相对git新手,可能是实现这一目标的最佳方式..以及发布/设置此方法的最佳命令.
*注意:Source Safe需要检查文件,然后才能对其进行更改.也许有一些工具/脚本我可以用来帮助自动化这个以将更改推回VSS?
围绕$ sign作为jQuery函数的别名,我有点麻烦,特别是在插件中.你能解释一下jQuery如何实现这种别名:它如何定义'$'作为jQuery函数的别名?这是第一个问题.
其次,你能解释下面的代码如何/为什么在插件的定义中将'$'映射到jQuery函数,为什么如果你不这样做,你的插件可能会与其他可能使用美元符号的库发生冲突?
(function( $ ){
$.fn.myPlugin = function() {
// Do your awesome plugin stuff here
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud) 我有一个Visual Studio 2010部署项目,其中包含以下设置:
DetectNewerInstalledVersion = True
InstallAllUsers = True
RemovePreviousVersions = True
Run Code Online (Sandbox Code Playgroud)
我正在构建的项目有几个DLL,由于实现序列化的传统方式,此项目的文件版本无法递增(我们正在更改).
如何让安装项目完全删除现有文件(或者至少覆盖所有新文件)?
也许我需要在安装程序中编写卸载脚本(有人可以链接我这样做,我找不到)
我环顾四周,对于任何现有的问题,他们都说"增加你的文件版本",但对我来说这不是一个选项.
我在我的类上设置了以下ExportMetaData属性:
[Export(typeof(IDocumentViewer))]
[ExportMetadata("Name", "MyViewer")]
[ExportMetadata("SupportsEditing", true)]
[ExportMetadata("Formats", DocFormat.DOC, IsMultiple = true)]
[ExportMetadata("Formats", DocFormat.DOCX, IsMultiple = true)]
[ExportMetadata("Formats", DocFormat.RTF, IsMultiple = true)]
Run Code Online (Sandbox Code Playgroud)
我也有一个支持界面:
public interface IDocumentViewerMetaData {
/// <summary>
/// Gets the format.
/// </summary>
/// <value>The format.</value>
IEnumerable<DocFormat> Formats { get; }
/// <summary>
/// Gets the name of the viewer
/// </summary>
/// <value>The name.</value>
string Name { get; }
/// <summary>
/// Gets a value indicating whether this viewer supports editing
/// </summary>
/// <value><c>true</c> if [supports editing]; …Run Code Online (Sandbox Code Playgroud) 我正在尝试用异步CTP弄脏手,我注意到编译器抱怨异步返回类型.其他类型有什么问题?
一个简单的演示
static void Main(string[] args)
{
DoWork();
Console.WriteLine("Returned to main");
Console.Read();
}
// why do I need to return void, Task or Task<T> here?
// I know I can use something like Task<IEnumerable<string>>
private static async string[] DoWork()
{
Console.WriteLine("DoWork started");
return await Task.Factory.StartNew(
delegate
{
Thread.Sleep(2000);
Console.WriteLine("DoWork done");
return new List<string>();
});
}
Run Code Online (Sandbox Code Playgroud) 如何确定REST Web服务是使用Basic,Kerberos,NTLM还是其他许多身份验证方法之一?
我刚刚在翻译一些数据时发现了一个有趣的问题:
VB.NET:CByte(4) << 8返回4
但是C#:(byte)4 << 8返回1024
也就是说,为什么VB.NET:(CByte(4) << 8).GetType()返回类型{Name = "Byte" FullName = "System.Byte"}
然而C#:((byte)4 << 8).GetType()返回类型{Name = "Int32" FullName = "System.Int32"}
有没有理由为什么这两个对待二进制移位是一样的?接下来,是否有任何方法可以使C#位移与VB.NET相同(使VB.NET像C#一样执行CInt(_____) << 8)?
c# ×4
.net ×3
linq ×3
lambda ×2
async-await ×1
c#-5.0 ×1
dynamic-linq ×1
foreach ×1
git ×1
installer ×1
interface ×1
jquery ×1
linq-to-sql ×1
mef ×1
vb.net ×1
vb.net-to-c# ×1