При написании кода любой программист делает проверки. Это нормально :) Для генерации ошибок в PHP есть три механизма:
При написании кода и его последующем тестировании было обнаружено совершенно неочевидное поведение функции assert. А теперь немного кода:
Что же во всем этом плохого? А то, что в случае, когда в assert передается строка, интерпретатор будет пытаться выполнить ее аналогично eval, что дает огромный простор для различных уязвимостей, так как злоумышленник в некоторых случаях может получить возможность выполнить произвольный код.
Документация функции assert.
- error (собственно ошибки);
- exception (исключения);
- assertion (утверждения).
При написании кода и его последующем тестировании было обнаружено совершенно неочевидное поведение функции assert. А теперь немного кода:
<?php
// Предположим у нас есть перменная $x
$test = 'TEST';
// Теперь проверим как работает переменная если мы используем ее в условии
if ($test)
echo "В переменной что-то есть\n";
// Код выведет текст "В переменной что-то есть"
// А теперь если сделать то же самое с assert
assert($test);
// Ассерт отработает нормально, но мы увидим ошибку PHP
// PHP Notice: Use of undefined constant TEST - assumed 'TEST' in php shell code(1) : assert code on line 1
Что же во всем этом плохого? А то, что в случае, когда в assert передается строка, интерпретатор будет пытаться выполнить ее аналогично eval, что дает огромный простор для различных уязвимостей, так как злоумышленник в некоторых случаях может получить возможность выполнить произвольный код.
<?php
$x = 'TEST';
assert('$x .= $x;');
echo $x; // TESTTEST
Документация функции assert.