關於如何保護圖片與存取權限

edited 十月 2013 in 進階PHP討論
各位前輩好:
最近在試著把圖片存入資料表內,
想說如此一來便可以保護圖片,只給特定對象存取
但是這樣子做也是會有一些不方便...比如管理員臨時需要快速預覽找圖片的時候
就沒能像資料夾檢視方便

另外還有想到用htaccess的方式,可是htaccess似乎跟我想做的功能有些出入,
我想做到說只有開放權限的帳號登入後才能看見指定的圖片(也不可以直接敲網址抓圖)
有點類似像104,1111履歷表,除了把圖片寫盡資料表外,請問還有甚麼比較正規的作法?
謝謝


原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=5662

評論

  • edited 一月 2011
    圖片放在網站目錄外做一個alias
    內部管理時可以靠.htaccess限制只有管理專用的domian可以直接取得//這招我沒用過,不過看過pigo這麼做過
    一般使用者則用PHP吃實體檔在echo出去
  • edited 一月 2011
    一樣寫入檔案 , 但資料庫中仍要記錄檔案的相關資訊 , 如長寬, size , mime type 比較好

    要看圖片時 , 是把網址指到 php 去 , 由 php 讀取內容並 echo 出來即可
    這樣你就可以由 php 去控制權限了

    例如 viewpic.php?filename=/xasd/111.gif

    注意 , 這個 /xasd 只是個相對路徑 , 真正存放檔案的的目路就不要放在 web server 可以直接存取的目錄

    再進階一點
    因為若由 php 去讀取檔案內容並輸出 , 若流量大其實對系統也是個負擔
    所以可以用一些 web server 特異功能
    可以去Google 查一下 "lighttpd sendfile" 或 "apache sendfile"
    可以用一串 header() 丟給 web server 去傳輸指定檔案 , 效能會快很多
  • edited 一月 2011
    不知道我這樣做對不對
    先在網頁跟目錄以外的地方新增資料夾,就叫alias好了,假設網頁資覅夾名稱是www或httpdocs,那麼alias這個目錄跟www是同目錄底下的資料夾,
    使用PHP上傳圖片,並且傳到alias資料夾裡面,
    這樣一來一般人是不可能瀏覽alias資料夾的檔案,
    然後設定一個判斷權限的 showpic.php檔案
    <?
    if(xxxx權限判斷xxxxx){
    $file = "../../alias/test.jpg";
    header("Content-type: image/JPEG",true);
    $image = fread(fopen($file,r),filesize($file));
    echo $image;
    }
    ?>
    假設這是個人資料大頭照好了,
    在個人資料頁.php裡面
    再用<img src="showpic.php">連結就可以了

    進階的,會再繼續研究看看~謝謝各位前輩!
  • edited 一月 2011
    你的程式方向對了
    可是你第一句話是筆誤還是怎樣 ?
    如果將 alias 放在 www 下 , 還是有辦法讓人抓出來的
    除非放個 .htaccess 去將此目錄寫 Deny from All 拒絕存取
    或把 alias 放到 www 的上一層也可以或其他位置 , 不要放到 www 下, www 下的 web server 都可以存取仍會被抓到
    因為內賊難防 !
  • 挖賽, google nginx 相關的東西時, 意外看到這篇自己於 2011 年的發問, 覺得當時的自己真嫩 XD

    現在網路技術真的爆炸多, 根本學不完啊 QQ
  • 是啊,學無止境,我現在用的技術也還很多停留在五六年前(嘆)
Sign In or Register to comment.