用于验证Active Directory对象SID的正则表达式

时间:2015-11-03 20:35:28

标签: php regex active-directory

我正在寻找一种方法来验证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
)

2 个答案:

答案 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位块。

https://msdn.microsoft.com/en-us/library/cc246018.aspx

How SIDs are created

https://en.wikipedia.org/wiki/Security_Identifier