確保您的表單是從您的頁面提交的!也可以透過在查詢字串中新增 &token 並使用 $_GET 將其與工作階段資料(或您喜歡的任何陣列)進行比對來應用於網址,前提是該字串是隨機產生並儲存的。如果您不希望使用 $_SESSION,您可以建立自己的陣列來儲存產生的字串,例如您可以建立 $tokens = array(),然後在您的 easysecure 類別中將所有內容儲存在該陣列中!
<?php
class easysecure {
var $curr_user;
var $curr_permission;
var $curr_task;
var $validpermission;
var $error;
function &setVar( $name, $value=null ) {
if (!is_null( $value )) {
$this->$name = $value;
}
return $this->$name;
}
function maketoken($formname, $id){
$token = md5(uniqid(rand(), true));
$_SESSION[$formname.$id] = $token;
return $token;
}
function checktoken($token, $formname, $id){
if(!$token){
$this->setVar('validpermission', 0);
$this->setVar('error', '找不到 token,偵測到安全橋接');
return false;
}
$key = $_SESSION[$formname.$id];
if($key !== $token ){
$this->setVar('validpermission', 0);
$this->setVar('error', '無效的 token');
return false;
}
if($this->validpermission !==1){
echo '沒有執行此腳本的權限';
return false;
}else{
return true;
}
}
}
?>
<?php $userid = *** ?>
<form name="newform" action="index.php" method="post">
<input type="text" name="potentialeveilfield" value="" size 30 />
<input type="hidden" name="token" value="<?php echo maketoken(newform, $userid); ?>" />
<input type="submit" />
</form>
現在處理表單時... 檢查您的 token 值
<?php
if( !checktoken($_POST['token'], 'newform', $userid))
{ exit(); }
?>