2014-07-15 97 views
0

我剛剛創建了兩個頁面。第一頁有幾個按鈕。如果用戶點擊一個按鈕,該按鈕的ID將發送到另一個頁面,並顯示在Div中。如何保護window.location的URL

示例: 第1頁:

<script type="text/javascript"> 
    $(document).ready(function(){ 
    $(".btn").click(function() 
{ 

    var val = $(this).attr("id"); 

    $(".divX").text(ausles); 

    window.location = 'page2.php?valX=' + val; 

});}); 
</script> 

使page2.php

<div class="ed"> <?php 
echo $_GET["valX"]; 
?></div> 

我的問題:

用戶現在可以改變值(X77)在URL:localhost/pt1/page2.p中hp?valX = x77`

我該如何阻止?

+0

阻止客戶端更改?我認爲默默無聞將是你最好的選擇 - 儘管這甚至不是100%的「安全」。 –

+1

你不能!敏感信息不應該存儲在URL中。 – HaukurHaf

+0

對於正在更改的查詢字符串,您可以做的事情並不多,這是按設計進行的。如果你想讓它成爲隱形使用POST,但即使那樣也不安全,它仍然是不可靠的,任何擁有現代瀏覽器的人都可以改變請求並重新提交。如果您的數據不變,請使用散列來確保完整性,如果沒有錯誤,請檢查它是否有錯誤的輸入,然後從那裏開始。 – scragar

回答

0

嘗試將您的值發佈到其他頁面上。下面的代碼將創建運行時的格式,並會自動提交給定的url

$(".btn").click(function(){ 
    var val = $(this).attr("id"); 
    $(".divX").text(ausles); 
    var form = document.createElement('form'); 
    form.method = 'post'; 
    form.action = 'page2.php'; 
    form.innerHTML = '<input type="hidden" id="valX" name="valX" value="' + val + '">'; 
    document.body.appendChild(form); 
    form.submit(); 
}); 

然後坐上使page2.php

<div class="ed"> <?php echo $_POST["valX"];?></div> 
+0

我沒有一個表格 – echoPepto

+0

它會創建表單自動和subbmit –

+0

爲什麼downvote請評論 –

0

您不能阻止對URL的更改。你有兩種選擇 -

a。更改爲使用POST而不是GET,其中URL中沒有任何內容

b。查詢字符串中需要多個項目,其中所有項目必須有效才能查看頁面。

3

你需要決定是否有太大的交易是一個用戶可以更改valX的值。

話雖如此,有幾種方法可以解決此問題。

$ _ POST

您可以張貼valX的值作爲表單提交,而不是重定向,這樣做的缺點是,如果用戶刷新或重新加載他們可能失去職位數據的頁面。

$ _COOKIE

你可以設置cookies,這可以在JS來完成,在PHP中檢索,對於如何在Javascript Look Here設置cookie的例子,餅乾仍然可以操作,但不太可能。

$ _SESSION

這可能是最安全的方式,但需要您設置PHP會話,這需要你使用AJAX在您的情況,當點擊該按鈕時,AJAX的PHP將該值存儲在會話中的文件,然後在第二頁上檢索該文件。

0

定義與所述按鈕的陣列這樣

$buttonValues = array(array(1, 'Text for number 1'), ...); 

現在您可以很容易地通過用於輸出循環。 並在page2.php中,您可以檢查提交的ID是否在數組中,如果不中止。 這是一個白名單方法,因此不受任何客戶端欺騙。

通過POST或COOKIE發送它只是意味着它不能被手工繞過。如果有人花時間模擬所有請求POST和COOKIES可以更改。