iT邦幫忙

0

yahoo搜尋引擎跳過php 登入後的session機制,直接讀取用session保護的頁面資料

  • 分享至 

  • xImage

做了一個會員登入的網站,登入後的資料頁面是用session來判斷,方式如下
一、login成功後,產生一個$_SESSION['admin_name']

		session_start();
		$_SESSION['admin_name'] = $row->username;

二、需要登入才能讀取的安全機制:用有沒有$_SESSION['admin_name']來判斷是否有登入

session_start(); 

if(empty($_SESSION['admin_name']) || !isset($_SESSION['admin_name'])){
		echo "<script type=\"text/javascript\">";
		echo "self.location=\"index.php\"";
		echo "</script>";	
}

實際操作起來都沒問題,如果沒有登入,該網頁就會自動導向index.php
但後來發現yahoo的搜尋引擎居然可以直接找到被session保護的頁面內容

請問各位前輩,是我的登入機制有安全上的盲點嗎?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
4
純真的人
iT邦大師 1 級 ‧ 2021-12-31 00:36:22

盲點就是你用了前端的JS轉址~
一般轉址都是用後端語言處理的~

搜尋引擎對JS而言是不起作用的~
他只把網頁當成純文字檔案而已~
zzhsu20 iT邦新手 5 級 ‧ 2022-01-02 22:26:56 檢舉

謝謝,受教了,原來搜尋引擎會忽視前端的js轉址,慘痛中學習經驗

2
黃彥儒
iT邦高手 1 級 ‧ 2021-12-31 01:47:41

前端的JS是使用者可以控制的,他可以讓任何一段JS失效
所以你的保護頁面如果沒有含機敏資料,是可以這樣做沒錯
但如果含有,還被讀到,那就是你的問題。

不希望爬蟲爬可以寫規則到robts.txt裡面

zzhsu20 iT邦新手 5 級 ‧ 2022-01-02 22:27:57 檢舉

謝謝,的確是我的問題,再來研究robts.txt

3
淺水員
iT邦大師 6 級 ‧ 2021-12-31 10:49:49

JS 轉址也不是不行
但是後面的資料就不要送出去了
例如用 exit 終止 php

session_start(); 

if(empty($_SESSION['admin_name']) || !isset($_SESSION['admin_name'])){
    echo "<script type=\"text/javascript\">";
    echo "self.location=\"index.php\"";
    echo "</script>";
    //這裡把 html 標籤閉合一下(略)
    exit(); //終止
}

記得用 header 轉址也是要加 exit
不然後續的資料也是會送出去

zzhsu20 iT邦新手 5 級 ‧ 2022-01-02 22:25:06 檢舉

謝謝,收到,加上exit()會更安全。

1
nick
iT邦新手 5 級 ‧ 2022-01-03 10:03:55

可以的話就改成PHP 回傳直接 302 導出去 (https://stackoverflow.com/questions/768431/how-do-i-make-a-redirect-in-php)
至於已經被 yahoo 收錄進去的網站
可以提交 robots.txt (https://tw.help.yahoo.com/kb/SLN2214.html)

session_start(); 

if(empty($_SESSION['admin_name']) || !isset($_SESSION['admin_name'])){
    header("Location: https://example.com/index.php", true, 302);
    die();
}

我要發表回答

立即登入回答