簡體   English   中英

HTTP_REFERER困境:只有當訪問者事先訪問過另一個特定頁面時,我才能允許訪問特定頁面?

[英]HTTP_REFERER woes: How can I allow access to a specific page, only when a visitor has visited another specific page beforehand?

PHP新手在這里瘋狂地掙扎着如何在我糟糕的下載系統中實現基於HTTP_REFERER的安全功能。

基本上,我有它在我的文件下載頁面有一個特定的字符串附加到URL的末尾,這個特定的字符串是:

?thanks

如果在URL中可以看到,那么用戶將能夠下載位於其上的文件。 它的效果很好,但只需在URL本身上添加“?thanks”部分即可輕松“解鎖”頁面。 有效地允許用戶繞過我笨拙的安全性並輕松訪問我的高級文件。

如果可能的話,我想添加一個安全措施,任何試圖訪問包含以前沒有從包含'?pending'的頁面到達的字符串'?thanks'的頁面的人都被重定向到主頁。 這將為我提供完美的解決方案。

為清楚起見,典型的預下載過程如下:

  • 用戶訪問下載頁面:[網站] / download / page / 123 /
  • 用戶完成Recaptcha,被重定向到這里:[website] / download / page / 123 /?pending
  • 用戶填寫詳細信息,重定向到這里:[網站] / download / page / 123 /?謝謝
  • 用戶收到他們的文件

啰嗦,是的,但對於我不尋常的要求來說,這將是非常理想的。 我也知道用戶可以通過首先在URL上附加'?pending'然后追加'?thanks'來解決這個問題,但它仍然真的,真的會有所幫助。

那么,StackOverflow,你們中的任何一個人都可以干嘛和善良的程序員幫助一個初出茅廬的網頁設計師嗎? 我感謝你的幫助。 干杯伙計們。

編輯:哦,這是一個失敗的方法,最后一次嘗試,但轟炸可怕,以防萬一它有助於進一步說明我的目標:

if (('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] == wp_get_shortlink().'?thanks') && (isset($_SERVER['HTTP_REFERER']) && preg_match("/".preg_quote('?pending',"/")."/i",$_SERVER['HTTP_REFERER']))) {
    echo 'Hurrah!';
} else {
    echo 'Oh dear.';
}

如果這一切只取決於請求本身的信息 ,那么就沒有辦法強制執行你想要做的事情。 引用者也只是一個任意請求頭

你需要的是實際的服務器端狀態 為用戶打開一個會話,給出他正在經歷一個隨機唯一ID的過程,該ID在過程中的每個頁面上傳送,並保存會話中接下來要顯示的進度和消息。

沒有像“基於HTTP_REFERER的安全性”這樣的東西。 這是矛盾的。

為了安全起見,您必須使用SESSION。 在您的特定情況下,它似乎也是最合適的:只需在會話中存儲訪問任何頁面的事實,然后在其他任何頁面上檢查該值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM