rspec/rules/S2078/php/rule.adoc

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[]