我正在寻找一种方法来验证从Active Directory插入的对象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
)
hjpotter92的答案将适用于某些SID,但不是所有SID。每个子机构都由一个32位整数组成,根据具体情况可以是10位或8位。您应该将正则表达式编辑为:
/^S-1-[0-59]-'d{2}-'d{8,10}-'d{8,10}-'d{8,10}-[1-9]'d{3}/
每当在Windows下创建新的颁发机构时(对于例如,部署的新机器或创建的域),则为其分配SID,其中5(任意值)作为标识符权限;固定的值21被用作唯一值,以将这组子授权,并且创建并分配96位随机数三个子机构,每个子机构收到32位区块
https://msdn.microsoft.com/en-us/library/cc246018.aspx
如何创建SID
https://en.wikipedia.org/wiki/Security_Identifier
查看wiki中的SID,以下内容应该有效:
/^S-1-[0-59]-'d{2}-'d{10}-'d{10}-'d{8}-[1-9]'d{3}/
SID的最后一部分是RID,它是一个32位标识符!这意味着RID可以有10位数字。因此,理论上最后一节的长度甚至可以是1+9位数!)
S-1-[0-59]-'d{2}-'d{10}-'d{10}-'d{8}-[1-9]'d{9}