我有流量以下文件:如何阻止我的PHP文件直接訪問
的index.html - >的login.php - > displayinbox.php
的login.php中的文件確認用戶數據庫並重定向到displayinbox.php文件。
問題是,如果有人只是鍵入直接鏈接到displayinbox.php頁面,頁面中的腳本運行。
我該如何阻止這種情況發生?我嘗試了'define'和'defined'方法,但這隻適用於我猜測的包含文件。任何幫助?
我有流量以下文件:如何阻止我的PHP文件直接訪問
的index.html - >的login.php - > displayinbox.php
的login.php中的文件確認用戶數據庫並重定向到displayinbox.php文件。
問題是,如果有人只是鍵入直接鏈接到displayinbox.php頁面,頁面中的腳本運行。
我該如何阻止這種情況發生?我嘗試了'define'和'defined'方法,但這隻適用於我猜測的包含文件。任何幫助?
使用會話值跟蹤用戶是否登錄。如果!$_SESSION['whatever']
將它們重定向到索引/登錄頁面。
例子:
的login.php
session_start();
/* login code here */
$_SESSION['logged_in'] = true;
displayinbox.php
session_start();
if (!$_SESSION['logged_in']) {
header("Location: login.php");
exit;
}
有很多方法可以做到這一點。在你的displayinbox.php和POST_SELF的頂部包含login.php,或者登錄後,設置會話cookie並檢查displayinbox.php頁面的頂部。
這是一個關於安全性的非常開放式的問題,它要求在這裏可以完全提供的任何答案都不止於此。在最簡單的層面上,設置一個$_SESSION
變量就是我會走的路。
如果您使用的是MVC模式,請使用所有需要密碼訪問的控制器進行擴展的Secure_Controller
。如果不使用MVC或甚至某種類型的模板,則需要在每個要包含密碼保護的頁面中包含一個腳本。
的login.php
<?php
//check username and pw against the database
if($passwordAndUsername == 'good'){
$_SESSION['loggedIn'] = 'yes';
}
?>
securityCheck.php
<?php
if($_SESSION['loggedIn'] != 'yes'){
$message = 'you must log in to see this page.';
header('location:login.php');
}
?>
包括securityCheck.php在任何密碼保護的頁面的開始。
在login.php中設置允許/禁止用戶的會話值。如果有人直接點擊顯示腳本,他們將沒有該會話值,並且您可以拒絕他們訪問。 –