PHP 8.6.0 Beta 1 is available for testing

Атрибут SensitiveParameter

(PHP 8 >= 8.2.0)

Введение

Атрибутом размечают параметр с чувствительным значением, которое PHP отредактирует, когда значение попадёт в трассировку стека вызовов.

Обзор класса

#[\Attribute]
final class SensitiveParameter {
/* Методы */
public function __construct ()
}

Примеры

<?php
function defaultBehavior(
 string $secret,
 string $normal
) {
 throw new Exception('Error!');
}
function sensitiveParametersWithAttribute(
 #[\SensitiveParameter]
 string $secret,
 string $normal
) {
 throw new Exception('Error!');
}
try {
 defaultBehavior('password', 'normal');
} catch (Exception $e) {
 echo $e, PHP_EOL, PHP_EOL;
}
try {
 sensitiveParametersWithAttribute('password', 'normal');
} catch (Exception $e) {
 echo $e, PHP_EOL, PHP_EOL;
}

Результат выполнения приведённого примера в PHP 8.2 аналогичен:

Exception: Error! in example.php:7
Stack trace:
#0 example.php(19): defaultBehavior('password', 'normal')
#1 {main}
Exception: Error! in example.php:15
Stack trace:
#0 example.php(25): sensitiveParametersWithAttribute(Object(SensitiveParameterValue), 'normal')
#1 {main}

Содержание

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 1 note

up
21
miqrogroove at gmail dot com
1 year ago
Beware this attribute does nothing on object interfaces and will permit password exposure when used incorrectly.
<?php
interface Server
{
 public function connect(
 #[\SensitiveParameter]
 string $password,
 );
}
class TestServer implements Server
{
 public function connect(
 string $password,
 ) {
 throw new Exception('Guess what?');
 }
}
($var = new TestServer())->connect('wrl!L3=6O57T9?r');
+Добавить

AltStyle によって変換されたページ (->オリジナル) /