0
私は通常、より大きなWebアプリケーションの一部として実行されるPHPスクリプトを持っています。 スクリプトは、基本的にデータベースをいくつか変更し、ステータス/結果についてWebユーザーに報告します。CLIから実行した場合、PHPスクリプトでセキュリティチェックをバイパスする方法はありますか?
私はPHPでの開口部があります。認証されたWebユーザのセキュリティレベルが1以下であるのであれば
require $_SERVER['DOCUMENT_ROOT'].'/security.php';
// Only level <=1 users should be able to access this page:
if ($_SESSION['MySecurityLevel'] > 1) {
echo '<script type="text/javascript" language="JavaScript">window.location = \'/index.php\'</script>';
exit();
}
は、基本的には、その後、彼らは単にWebアプリケーションのインデックスにリダイレクトされます。
スクリプトは、Webブラウザを介してこのようにうまく動作します。私の問題への今
...
私は、このスクリプトものcronジョブをしたい - しかし、私は実行した場合は、CLIからのセキュリティチェックを回避する方法がわかりません。
私は単に '/path/to/report.php -f PHP' でCLI/cronでそれを実行し、「場合(php_sapi_name()!= 'CLI')にセキュリティチェックを同封した場合 "と入力すると、$ _SERVER []ヴァルスがスクリプトで使用されています(その他の問題が発生する可能性がありますが、これが最初に発生したエラーです)。
CURLを使用して実行すると、php_sapi_name()チェックはApacheでサービスされているだけなので、機能しません。
誰かに助けてもらえますか?
ありがとうございました! :)
スクリプトが常に定義されていない変数に依存している場合は、すべてのインスタンスを条件付き 'isset()'またはそれに類するもので囲むか、いくつかのダミーデータを前もって定義する必要があります。 – moopet
明らかに、ユーザーのセキュリティレベルが1より高い場合は、インデックスにリダイレクトされます。 –
@moopetまあ、現在の状態では、$ _SERVER変数は常に定義されており、必要です。たとえば、データベースへの接続を作成するには、 "require $ _SERVER ['DOCUMENT_ROOT']。 '/ dbconnect-rw.php';"があります。だから私はCLIのWebから実行されているかどうか、この追加のスクリプトを含めることができる必要があります。 –