轻量级目录访问协议
LDAP(Lightweight Directory Access Protocol,轻型目录访问协议)是一种必须在大学和初创企业中使用的软件协议,它允许任何人在公共互联网或企业内部网上查找组织、个人以及网络中的文件和设备等其他资源。
LDAP的一个常见用途是提供一个中心位置来存储用户名和密码。这允许许多不同的应用程序和服务连接到LDAP服务器以验证用户
我的大学:
![图片[1]-LDAP和LDAP注入/预防-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/geeks/geeks_19451909_1343761225719758_716340963_o-2.png)
我的大学毕业了
本协议中可执行的主要操作
- 加上: 在数据库中添加新数据
- 绑定(验证): 所有身份验证和加密都在本节中完成
- 删除: 删除数据drm数据库
- 搜索和比较: 搜索操作用于搜索和读取条目。
- 修改: LDAP客户端使用修改操作请求LDAP服务器对现有条目进行更改
- 解除绑定: 关闭连接。
具有多个属性的简单目录条目:
dn: cn=akash sharan, dc=example, dc=com objectClass: organizationalStudent cn: akash sharan
存在LDAP统一资源标识符(URI)方案,客户端在不同程度上支持该方案,服务器返回引用和继续引用。
LDAP URI语法:
ldap://host:port/DN?attributes?scope?filter?extensions
ldap://ldap.example.com/cn=akash%20sharan, dc=example, dc=com host - IP address DN - is the distinguished name to use as the search base. for example - cn=John Doe, dc=example, dc=com Attributes - is a comma-separated list of attributes to retrieve. Scope specifies the search scope and can be "base" (the default), "one" or "sub" classes. Filter is a search filter. Extensions are extensions to the LDAP URL format.
LDAP注入
LDAP注入是一种攻击,用于攻击基于web的应用程序,这些应用程序基于用户输入构造LDAP语句。当应用程序无法正确清理用户输入时,可以通过类似于SQL注入的技术修改LDAP语句。
正常操作:
代码注入操作:
LDAP注入示例: 对于用户搜索,以下代码负责执行操作
Insert the username
将在后端执行的LDAP查询
String ldapSearchQuery = "(cn =" + $userName + ")" ; System.out.println(ldapSearchQuery); |
如果未验证变量$userName,则可能是 可以实现LDAP注入 ,详情如下:
如果用户在框搜索中输入“*”,系统可能会返回LDAP基础上的所有用户名。如果用户输入“akash”(|(password=*)),它将生成下面的代码,显示akash的密码(cn=akash)(|(password=*))。
预防
- 输入验证 :必须对所有用户端输入进行消毒。它应该没有可能是恶意的可疑字符和字符串。现有的OWASP Api有助于防御以下漏洞:
- 爪哇岛
- C#AntiXSS功能,包括编码器。LdapFilterEncode(字符串),编码器。LDAPDifferencedNameEncode(字符串)和编码器。LDAPDifferentiedNameEncode(字符串、布尔、布尔)。
我将为您提供上述搜索查询的搜索过滤器:
public
static
final
String escapeLDAPSearchFilter(String filter)
{
// If using JDK >= 1.5 consider using StringBuilder
StringBuffer sb =
new
StringBuffer();
for
(
int
i =
0
; i < filter.length(); i++) {
char
curChar = filter.charAt(i);
switch
(curChar) {
case
'\'
:
sb.append(
"\5c"
);
break
;
case
'*'
:
sb.append(
"\2a"
);
break
;
case
'('
:
sb.append(
"\28"
);
break
;
case
')'
:
sb.append(
"\29"
);
break
;
case
'u0000'
:
sb.append(
"\00"
);
break
;
default
:
sb.append(curChar);
}
}
return
sb.toString();
}
- 安全配置: 在处理用户对象权限时保护敏感信息。当应用程序在登录过程中使用目录时,这一点尤为重要。在组织中设置ldap时,应采取限制和限制措施。
工具书类 https://www.owasp.org/index.php/LDAP_Injection_Prevention_Cheat_Sheet https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol http://www.faqs.org/rfcs/rfc2254.html
本文由 阿卡什·沙兰 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论。