C# 具有DirectoryEntry用户名和密码的LDAP注入漏洞?
作为身份验证过程的一部分,我们根据用户输入的用户名和密码构建C# 具有DirectoryEntry用户名和密码的LDAP注入漏洞?,c#,ldap,directoryservices,checkmarx,C#,Ldap,Directoryservices,Checkmarx,作为身份验证过程的一部分,我们根据用户输入的用户名和密码构建System.DirectoryServices.DirectoryEntry: var de=new DirectoryEntry(ldappath fromconfig、typedUserName、typedPassword、AuthenticationTypes.ReadonlyServer | AuthenticationTypes.Secure); 但是当我们通过Checkmarx运行代码时,它声称在typedUserNam
System.DirectoryServices.DirectoryEntry
:
var de=new DirectoryEntry(ldappath fromconfig、typedUserName、typedPassword、AuthenticationTypes.ReadonlyServer | AuthenticationTypes.Secure);
但是当我们通过Checkmarx运行代码时,它声称在
typedUserName
和typedPassword
上存在“LDAP注入”漏洞,因为它们没有被清除。我不明白为什么,因为根据定义密码可以是任何东西。。。而且,显然是要接受用户名
和密码
作为第二个和第三个参数。对于Checkmarx,您应该始终清理(验证)您使用的每个值。如果你不这么做,Checkmarx会认为这是不可信的,顺便说一句,按照Checkmarx的规则,这可能会导致一些注射。在您的情况下,这是Checkmarx的正常发现
LDAP注入和SQL注入一样都是通用的,我记得,LDAP没有类似参数化的解决方案(请参阅) 对于Checkmarx,您应该始终清理(验证)您使用的每个值。如果你不这么做,Checkmarx会认为这是不可信的,顺便说一句,按照Checkmarx的规则,这可能会导致一些注射。在您的情况下,这是Checkmarx的正常发现
LDAP注入和SQL注入一样都是通用的,我记得,LDAP没有类似参数化的解决方案(请参阅) 那么,我该怎么办?我应该逃避特殊角色吗?但是
System.DirectoryServices.DirectoryEntry
是否需要一个转义字符串,或者它是否会与密码不匹配?因为正如我所说,这不是一个可分辨名称,也不是一个过滤器字符串。构造函数被记录为需要密码,简单明了。我不确定,但我认为它不需要转义字符串。这应该与存储在LDAP树中的格式相同。因此,如果密码已转义,并且存储区已转义,那么这应该可以正常工作,我应该怎么做?我应该逃避特殊角色吗?但是System.DirectoryServices.DirectoryEntry
是否需要一个转义字符串,或者它是否会与密码不匹配?因为正如我所说,这不是一个可分辨名称,也不是一个过滤器字符串。构造函数被记录为需要密码,简单明了。我不确定,但我认为它不需要转义字符串。这应该与存储在LDAP树中的格式相同。因此,如果密码已转义,并且存储区已转义,则应该可以使用