60 lines
1.2 KiB
Plaintext
60 lines
1.2 KiB
Plaintext
include::../description.adoc[]
|
|
|
|
== Noncompliant Code Example
|
|
|
|
----
|
|
$user = $_GET["user"];
|
|
$pass = $_GET["pass"];
|
|
|
|
$filter = "(&(uid=" . $user . ")(userPassword=" . $pass . "))"; // Unsafe
|
|
|
|
$ds = ...
|
|
$basedn = "o=My Company, c=US";
|
|
|
|
$sr = ldap_list($ds, $basedn, $filter); // Noncompliant
|
|
----
|
|
|
|
== Compliant Solution
|
|
|
|
----
|
|
function sanitize_ldap_criteria($val) {
|
|
$val = str_replace(['\\', '*', '(', ')'], ['\5c', '\2a', '\28', '\29'], $val);
|
|
for ($i = 0; $i<strlen($val); $i++) {
|
|
$char = substr($val, $i, 1);
|
|
if (ord($char)<32) {
|
|
$hex = dechex(ord($char));
|
|
if (strlen($hex) == 1) $hex = '0' . $hex;
|
|
$val = str_replace($char, '\\' . $hex, $val);
|
|
}
|
|
}
|
|
return $val;
|
|
}
|
|
|
|
$user = sanitize_ldap_criteria( $_GET["user"] );
|
|
$pass = sanitize_ldap_criteria( $_GET["pass"] );
|
|
|
|
$filter = "(&(uid=" . $user . ")(userPassword=" . $pass . "))"; // Safe
|
|
|
|
$ds = ...
|
|
$basedn = "o=My Company, c=US";
|
|
|
|
$sr = ldap_list($ds, $basedn, $filter);
|
|
----
|
|
|
|
include::../see.adoc[]
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::../message.adoc[]
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::../comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|