В PHP 5.6+ вы должны использовать функцию ldap_escape для значений фильтра и RDN. Такие как:
// Escaping an LDAP filter for ldap_search ...
$username = ldap_escape($username, null, LDAP_ESCAPE_FILTER);
$filter = "(sAMAccountName=$username)";
// Escaping a DN to be used in an ldap_add, or a rename...
$rdn = ldap_escape('Smith, John', null, LDAP_ESCAPE_DN);
$dn = "cn=$rdn,dc=example,dc=local";
Кроме того, если вы принимаете пользовательский ввод для имен атрибутов при поиске, вы должны проверить, что это приемлемый OID или имя атрибута. Вы можете сделать это с помощью такой функции:
/**
* Validate an attribute is an OID or a valid string attribute name.
*
* @param string
* @return bool
*/
function isValidAttributeFormat($value)
{
$matchOid = '/^[0-9]+(\.[0-9]+?)*?$/';
$matchDescriptor = '/^\pL([\pL\pN-]+)?$/iu';
return preg_match($matchOid, $value)
|| preg_match($matchDescriptor, $value);
}
$attribute = 'sAMAccountName';
$value = 'foo';
if (!isValidAttributeFormat($attribute)) {
throw new \InvalidArgumentException(sprintf('Invalid attribute name: %s', $attribute));
}
$value = ldap_escape($value, null, LDAP_ESCAPE_FILTER);
$filter = "($attribute=$value)";