2012-08-12 50 views
0

我有一個WordPress站點,我想在login的重新定位,除非你註冊被鎖定給公衆,如。所以現在我使用的代碼是:需要登錄訪問我的WordPress網站

<?php 
if (is_user_logged_in()) { 

} else { 
$coolio=curPageURL(); 
if (strpos($coolio,'register.php') !== false) { 
break; 
} 
else{ 
    echo "<script>window.location = 'http://example.com/wp-login.php'</script>"; 
    break; 
} 
if (strpos($coolio,'login.php') !== false) { 
break; 
} 
else{ 
    echo "<script>window.location = 'http://example.com/wp-login.php'</script>"; 
    break; 
} 
} 
?> 

似乎它應該工作,但它會在任何頁面上創建一個無限循環。有人知道爲什麼嗎?

注:curPageUrl只是返回當前頁面的URL。

回答

2

您發佈的代碼有一些顯著的安全問題:

  • 用戶只需禁用Javascript功能來防止被重定向。
  • 用戶可以簡單地添加?register.php到URL,以避免觸發重定向代碼。

相反,使用服務器端的會話變量檢查。如果會話中沒有設置「登錄」標誌,那麼您將重定向到登錄頁面。

這有2個大規模的優點:

  1. 登錄的狀態保持的地方,用戶可以不做任何操作它,除非在
  2. 記錄如果惡意用戶只需象垃圾一樣清除會話cookie,他們只會得到一個新的空白會話,並被視爲「未登錄」,無論如何只是重新定向。
+0

嗯。 *換句話說,這段代碼無可救藥地壞了。*來吧,告訴我們你真的**的感受。 – 2012-08-12 00:57:52

+0

@AdamMagyar - 留言:不要半屁股,或者馬克·B會取得你的後端/更好的一半。 ':)' – 2012-08-12 01:03:26

+0

哇夥計感謝您的及時響應。對於任何安全密集的事情,我並沒有真正做到這一點,但我確實看到只是......不使用低劣的代碼的價值。所以在理論上,我應該像用戶登錄一樣,將變量設置爲1,如果其他則爲0? – 2012-08-12 01:06:30

0

我將無法使用JavaScript重定向,用php做。

其次做到這一點,而不是邏輯:

if(!($_SESSION["loggedin"]== 1)) 
{ 
    if(!(stripos($url,'register.php'))) 
    { 
     header('Location: http://example.com/wp-login.php', true, 302); 
     exit; 
    } 
} 
+0

'stropos()',呃?這是一個新的。或者,也許你的意思是'stripos()':P – 2012-08-12 23:53:23

+0

我在iPhone上午夜後輸入它......代碼很簡單,所以我不擔心任何人都可能在實現時遇到很多麻煩。 – user1203347 2012-08-15 05:25:24