2011-07-12 181 views
1

隱藏在超級鏈接

echo <a href=\"javascript:;\" onClick=\"window.open('". $link ."','no','scrollbars=yes,width=550,height=400')\" >View report</a> 

$鏈接包含敏感信息的實際的鏈接,所以我不知道如果有一個簡單的方法來防止這個環節出明確的,當你「查看源代碼」上瀏覽器。任何替代href的都可以。我只需要給用戶一個選項,在提交一些數據後點擊並查看他的處理結果。我希望避免在提交處理後立即自動彈出。

UPDATE:所以$ link是一個包含用戶ID和密碼的GET URL。它現在是內部的,所以沒關係,但是我打算將這個放在我們的在線服務器上。我非常熟悉PHP,所以這可能不會在不久的將來,因爲我對因特網上的實時站點需要實施的安全功能知之甚少。現在看來,使用數據庫似乎是最好的選擇。如果我錯了,請糾正我,並感謝所有的支持!

+2

你意識到這一點,即使你能做到這一點,結果頁面的URL仍清晰可見?即使只有JavaScript控制檯和一個快速的'document.location;'? –

回答

5

如果用戶必須導航到鏈接,則無法真正隱藏信息。你應該重新思考你的流程是如何工作的,因此敏感信息不會顯示在鏈接中。

也許您可以將信息存儲在數據庫表中,鏈接將只使用具有該信息的行的ID。

+0

感謝您的意見。我讀到存儲在數據庫信息,並參照DB的ID以及..看來,這種鏈接結構的DB-路由器是唯一的出路。 – musicliftsme

4

簡而言之:不。如果您發送給我一個URL,我將能夠使用某種工具查看它。 Wireshark,Fiddler等。考慮使用不同的鏈接結構。

+0

感謝您的簡短回答。直接點! – musicliftsme

+0

「,因此$ link是一個包含用戶ID和密碼的GET URL。」 這是不好的,很明顯,你也知道這一點。使用會話來存儲這些信息,或使用框架(CI/CakePHP)輕鬆地將變量從控制器傳遞到控制器。 –

+0

是的,我知道。我真的需要研究這個框架業務。我不確定什麼是「框架」,但聽起來像我應該實施它,即使我是一個大白菜。我在想Zend Framework。 – musicliftsme

1

$link是怎麼產生的?如果它敏感,這意味着用戶已經以某種方式被認證。因此,在$link的信息可以存儲在它的safe

+0

我在帖子中添加評論。請看一下。謝謝! – musicliftsme

2

如果用戶已經擁有一個會話的會話,這是一個選項:

如果您呈現一個頁面,需要保護這個給定的樣本祕密URL

http://www.MyHost.com/?what?secret&id=23232 

保存在用戶的會話,並關聯與祕密URL散列值的URL。

代替將URL發送到結果HTML頁面,插入另一個URL,例如,

http://www.MyHost.com/?continueWith=<hashValue> 

如果調用此URL,請檢查用戶會話並檢索並刪除祕密URL。然後繼續評估,就好像用戶已經調用了祕密URL一樣。

這樣,原始祕密URL的任何參數都不會到達用戶的瀏覽器。

要優化模式,請將生命期附加到保存在會話中的URL中。如果一個請求晚些時候出現,則返回一個錯誤。

如果您以這種方式保護所有網址,用戶將無法調用任意網址,因爲所有可接受的網址都是其會話中的網址。因此,用戶甚至不能更改較少祕密URL的參數。

0

保存所有在你的PHP會話信息(或最好的會議系統的PHP框架使用),然後就發出了某種在鏈接非DB-相關的標識符,這樣的代碼知道你下一步想做什麼。

例如,您可以鏈接到「http://www.yourdomain.com/sec/special_action/4」,其中「sec」表示安全,「special_action」是要採取的操作的名稱,「 4「是動作ID參考。

因此,可以說,你必須有與之關聯到他們的社會安全號碼。然後你會在你的後端使用salted hash來加密SSN並將它保存到會話數據中。然後將它附加到會話數組的末尾並獲取數組數。如果它返回5,那麼你知道加密的SSN被保存在索引4中(因爲PHP使用基於0的索引)。因此,您將該索引作爲鏈接的一部分發送給更多人。如果你願意,你甚至可以用鹽和散列索引。

用戶點擊鏈接時,代碼發現索引,抓住所述加密內容,解密它,然後使用它。簡單而安全。