コードを書くとき、プログラマーはチェックを行います。 これは正常です:) PHPでエラーを生成するメカニズムは3つあります。
- エラー(実際にはエラー);
- 例外
- アサーション(ステートメント)。
コードの記述とその後のテストで、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
このすべてについて何がそんなに悪いのですか? そして、文字列がアサートに送信される場合、インタープリターはevalと同じ方法でそれを実行しようとします。これにより、場合によっては攻撃者が任意のコードを実行できる可能性があるため、さまざまな脆弱性の範囲が大きくなります。
<?php $x = 'TEST'; assert('$x .= $x;'); echo $x;
関数のドキュメントをアサートします 。