При написании кода любой программист делает проверки. Это нормально :) Для генерации ошибок в 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.
