Skip to content

SessionRegenerationFailureUnchecked ​

warning native off by default

Group: Security

Session identifier regeneration can fail. Check its result before establishing the configured authenticated session state. This inspection is disabled by default because the intended policy or use can vary.

Example ​

php
<?php
session_regenerate_id(true); $_SESSION["authenticated"]=true;

Reported:

  • line 2: Check session identifier regeneration before authenticating.

Detection ​

  • Resolved session_regenerate_id result is discarded immediately before assignment of true to a configured authentication session key (default authenticated). Require explicit $_SESSION literal key and no result guard; ordinary regeneration excluded. The result is still discarded when the call statement is wrapped in parentheses or silenced with the @ operator, in any nesting: suppressing the warning does not check the outcome. Any other wrapper (negation, cast, assignment, output) uses the result and is not reported.
  • Resolve builtin functions, classes, constants and methods; user-defined lookalikes are excluded. Follow only bounded local proof in one lexical scope.
  • Emit one finding per violating operation, not per supporting evidence statement. When the proof is inconclusive, nothing is reported.

Exceptions (no report) ​

  • Do not report unresolved or shadowed builtin names, unknown values, or incomplete receiver/type provenance. Unknown calls, aliases escaping, and intervening writes invalidate local proof. Similar code outside the stated detection contract is not a finding.
  • Both standard suppression forms suppress this native ID.

Fix ​

None. Choosing a repair requires intent or additional runtime information.

PHP versions ​

Available throughout supported PHP 5.3–8.5 where the referenced builtin/extension is available. Respect syntax/version-specific receiver contracts; unavailable APIs are not this rule’s concern.

Options ​

OptionTypeDefaultEffect
authenticationKeyslist["authenticated"]$_SESSION keys whose assignment of true marks a login; only regeneration right before such an assignment is checked.

Configure ​

In custos.json:

json
{
  "rules": {
    "SessionRegenerationFailureUnchecked": {
      "enabled": true,
      "options": {
        "authenticationKeys": ["authenticated"]
      }
    }
  }
}

Suppress ​

Before the statement or declaration (or the first statement of the file):

php
// @custos-ignore SessionRegenerationFailureUnchecked

Released under the MIT License. Native rules and rules modeled on Php Inspections (EA Extended); independent clean-room implementation.