【问题标题】:Regex for Validating an Active Directory Object SID用于验证 Active Directory 对象 SID 的正则表达式
【发布时间】:2015-11-03 20:35:28
【问题描述】:

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

【问题讨论】:

  • 规则是什么?总是S-something- 之间的数字是否被限制为一定的数字?
  • 我知道这已经很多年了,但是您的“宽松”模式对我有用,而接受的答案却没有,因为我正在使用的几个 SID 以 4、5 和甚至有些是 6 位数字。

标签: php regex active-directory


【解决方案1】:

查看wiki for SID,以下应该可以工作:

/^S-1-[0-59]-\d{2}-\d{10}-\d{10}-\d{8}-[1-9]\d{3}/

【讨论】:

    【解决方案2】:

    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 下创建新的颁发机构时(对于 例如,部署了一台新机器或创建了一个域),它被分配了一个 SID 以 5(任意值)作为标识符授权;一个固定的 值 21 用作唯一值来根这组 子权限,并创建一个 96 位随机数并分配出去 给三个分机构,每个分机构收到一个 32 位块。

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

    How SIDs are created

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

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多