1.始终使用框架提供的功能来进行正确的验证,过滤或转义用户输入的数据;
2.不允许用户指定客户端的属性值。使用可由用户指定的存储值或服务器端功能。
3.更好地格式化查询语句,以防止被恶意修改。
LDAP(Lightweight Directory Access Protocol):即轻量级目录访问协议。是一种运行于TCP/IP之上的在线目录访问协议,主要用于目录中资源的搜索和查询。使用最广泛的LDAP服务如微软的ADAM(Active Directory Application Mode)和OpenLDAP。
而LDAP 注入是利用用户引入的参数生成恶意 LDAP 查询,通过构造 LDAP 过滤器来绕过访问控制、用户权限提升。在维持正常过滤器的情况下构造出 AND、OR 操作注入来获得敏感信息。
LDAP注入的防御跟SQL注入的防御其实差不多,主要就是要把用户输入的东西过滤好,基本就可以防御了。
下图包含了LDAP中用到的特殊字符和需要转义处理的字符:
左边的字符在正常情况下是不会用到的,如果在用户的输入中出现了需要用反斜杠转义处理。而右边的圆括号这些如果不过滤的话就会导致过滤器闭合而生产攻击者需要的filter,这里看到不仅是用反斜杠处理,还将字符变成了相应的ASCII码值,这些符号本不该出现。
这段php防御代码可以记录一下:
function ldapspecialchars($string) { $sanitized=array('' => '5c', '*' => '2a', '(' => '28', ')' => '29', "x00" => '00'); return str_replace(array_keys($sanitized),array_values($sanitized),$string); }
LDAP服务开启的端口是389,如果发现某个服务器上开启了该端口很可能就是开启了LDAP服务。
LDAP注入防御
1. 始终使用框架提供的功能来进行正确的验证,过滤或转义用户输入的数据;
2. 不允许用户指定客户端的属性值。使用可由用户指定的存储值或服务器端功能。
3. 更好地格式化查询语句,以防止被恶意修改。
LDAP注入防御:
始终使用框架提供的功能来进行正确的验证,过滤或转义用户输入的数据;
不允许用户指定客户端的属性值。使用可由用户指定的存储值或服务器端功能。
更好地格式化查询语句,以防止被恶意修改。
使用编码转义输入;
严格的目录授权。
只要是防御注入无非从以下几点入手:
- 在构造动态SQL语句时,一定要使用类安全(type-safe)的参数加码机制
- 在部署应用前,始终要做安全审评(security review)
- 千万别把敏感性数据在数据库里以明文存放
- 确认编写了自动化的单元测试,来特别校验你的数据访问层和应用程序不受SQL注入攻击
- 锁定你的数据库的安全,只给访问数据库的web应用功能所需的最低的权限
- 很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用 来防止别人进行手动注入测试
只要是防御注入无非从以下几点入手:
- 在构造动态SQL语句时,一定要使用类安全(type-safe)的参数加码机制
- 在部署应用前,始终要做安全审评(security review)
- 千万别把敏感性数据在数据库里以明文存放
- 确认编写了自动化的单元测试,来特别校验你的数据访问层和应用程序不受SQL注入攻击
- 锁定你的数据库的安全,只给访问数据库的web应用功能所需的最低的权限
- 很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用 来防止别人进行手动注入测试