2011-06-22 50 views
3

我正在嘗試寫一個接受表單(基於cookie)來拒絕/允許訪問我正在工作的網站;我不是任何安全專家,所以我需要一些關於如何使我的表單提交更安全的技巧,以及如何存儲用戶請求的原始頁面,以便他們在接受後可以重定向到適當的頁面。使用Cookie來限制訪問

下面是基本的腳本,我已經做了:

<?php 
if(isset($_POST['accept'])) { 
    setcookie ('accept', '1'); 
    header('Location: http://www.the_page_that_was_requested'); 
    exit(); 
} elseif(isset($_POST['decline'])) { 
    setcookie('accept', '0'); 
    exit(); 
} 
?> 

和形式:

<form action='' method ='post'> 
<ul> 
    <li> <input type= 'radio' name = 'accept' value = 'accept' /> I accept </li> 
    <li> <input type= 'radio' name = 'decline' value = 'decline' /> I decline </li> 
    <li> <input type = 'submit' value = 'Submit' name = 'submit' /> </li> 
</ul> 

我可能就沒有瓦特/我的第一篇文章很清楚:

的我想用這個網站是WP上的一個webcomic。漫畫有「成熟」的內容(暴力,語言,我只是想用cookie作爲一種機制讓讀者「同意」他們將會看這樣的內容。是的,我考慮使用$ _SESSION要做到這一點,但在這種情況下,如果有人願意「僞造」他們願意查看此類內容,我可以不在乎他們是否有權訪問Cookie。確保我的表格是安全的,並沒有打開我的網站上,以某種容易開採。

+1

而不是給客戶端數據,他們可以更改,您應該使用會話來存儲數據。 – zzzzBov

回答

3

任何敏感信息不應該被存儲在cookie中,包括安全性/權限標誌。

相反的餅乾,取一個廁所k在sessions,它不存儲在客戶端的數據(因此在操縱手的範圍之外)。這本身並不完全安全,但這是完全不同的討論。

1

改爲使用sessions。會話信息存儲在Web服務器上,而不是本地客戶端上。

<?php 
sessions_start(); 
if(isset($_POST['accept'])) { 
    $_SESSION['accept'] = TRUE; 
} 

至於引薦,HTTP_REFERER不保留通過SSL(這是你應該,如果你的表格是收集敏感信息做)。

如果你是通過SSL,你可以做這樣的事情:

  • 一個網頁鏈接到您的窗體:
    <a href="myform.php?r=<?=urlencode("http://your.url")?>">My form</a>

  • 你的形式增加了一個隱藏的輸入與價值r
    <input type="hidden" name="r" value="<?=$_GET['r']?>" />

如果你不支持SSL(不推薦),你可以做這樣的事情:

  • 你的形式增加了一個隱藏的輸入與HTTP_REFERER值:
    <input type="hidden" name="r" value="<?=urlencode($_SERVER['HTTP_REFERER'])?>" />

無論是這樣,你的後腳本將使用的r POST'ed值來重定向:
header("Location: ".urldecode($_POST['r']));

然後,您可以檢查會議VAR可以在您域中的任何其他頁面上的任何其他位置使用:

<?php 
session_start(); 
if($_SESSION['accept'] == TRUE) { 
    //they have access 
} 
?>