我正在寻找一种方法来验证Active Directory中插入的Object SID是否有效,这是否可以使用preg_match()
或preg_match_all()
?
我已经在线查看了此验证的正则表达式,但我找不到任何内容。
示例:
$sid = 'S-1-5-21-1220945662-1202665555-839525555-5555';
if ($validator->validateSid($sid)) {
// SID is valid!
}
我不擅长编写正则表达式,所以如果有人绝对有任何意见,请告诉我,谢谢!
编辑:对于使用以下正则表达式寻找代码的任何人:
preg_match("/^S-1-[0-5]-\d{2}-\d{10}-\d{10}-\d{9}-[1-9]\d{3}/", $search, $matches);
// Returns
array(
0 => S-1-5-21-1220945662-1202665555-839525555-5555
)
或者更宽松的模式:
preg_match("/S-1-5-21-\d+-\d+\-\d+\-\d+/", $sid, $matches);
// Returns
array(
0 => S-1-5-21-1220945662-1202665555-839525555-5555
)
答案 0 :(得分:2)
查看wiki for SID,以下内容应该有效:
/^S-1-[0-59]-\d{2}-\d{10}-\d{10}-\d{8}-[1-9]\d{3}/
答案 1 :(得分:1)
hjpotter92的答案适用于某些SID,但并非全部。 每个下级机关由一个32位整数组成,该整数可以是10位或8位。您应将正则表达式编辑为:
/ ^ S-1- [0-59]-\ d {2}-\ d {8,10}-\ d {8,10}-\ d {8,10}-[1-9] \ d {3} /
无论何时在Windows下创建新的发行机构(用于 例如,部署了新计算机或创建了域),则为其分配了一个 具有5(任意值)作为标识权限的SID;固定的 值21用作唯一值以根该组 子权威,并创建一个 96位随机数并将其打包 到三个分支机构,每个分支机构都会收到一个 32位块。