我有一個PHP腳本,它通常作爲更大的Web應用程序的一部分運行。 該腳本實質上對數據庫進行了一些更改,並將狀態/結果報告給Web用戶。如何繞過PHP腳本中的安全檢查,如果從CLI運行?
我在PHP的開口部:
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用戶的安全等級不高於1,那麼他們只是重定向到Web應用程序的索引。
該腳本可以通過網絡瀏覽器正常工作。
現在我的問題......
我也想的cron作業此腳本 - 但我不知道,如果從CLI RAN如何繞過安全檢查。
如果我只是從CLI/cron的與 'PHP -f /path/to/report.php',並在「如果封閉安全檢查運行(php_sapi_name()!= 'CLI')「,它會在腳本中使用多個用法(可能會有其他複雜情況,但是這是遇到的第一個錯誤),因此發生錯誤。
如果我使用CURL運行它,那麼php_sapi_name()檢查將不起作用,因爲它只是由Apache提供服務。
請任何人都可以提供一些幫助?
謝謝! :)
如果你的腳本依賴於並不總是定義的變量,你要麼需要包裝每一個實例在有條件'isset()函數'或類似的,或者您需要定義前面一些虛擬的數據。 – moopet
顯然,我的意思是說,如果用戶的安全級別高於1,那麼他們將被重定向到索引! –
@moopet那麼,在它的當前狀態下$ _SERVER變量總是被定義 - 並且是必需的。例如,要創建到數據庫的連接,有一個「require $ _SERVER ['DOCUMENT_ROOT']。'/ dbconnect-rw.php';」。所以我需要能夠包含這個額外的腳本,無論它是否從CLI的web運行。 –