ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: MisterAoD ที่ 25 พฤษภาคม 2007, 20:04:46



หัวข้อ: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: MisterAoD ที่ 25 พฤษภาคม 2007, 20:04:46
สวัสดีครับ

วันนี้ผมมีปัญหาเรื่อง php มาอยากขอความรู้ครับ

โจทย์ของผมคือ ผมอยากให้ user download ไฟล์โดยการคลิ๊กที่ link จากหน้าที่มีให้คลิ๊กเท่านั้น ไม่อยากให้เค้าสามารถเรียกไฟล์ตรงๆ ได้

ง่ายดีไหมครับ อันนี้แก้ๆ ง่ายโดยการเช็ค referer ใช่ไหมครับ อะ จบไป

ถ้า user เค้าแก้ header วิธีนี้ก็ไม่ได้ผลละ ผมเลยนึกต่อไม่ออกว่าจะกันยังไงครับ

คือสุดท้าย อยากให้ user คลิ๊กที่ link เท่านั้นห้ามใช้วิธีการอื่น ช่วยผมด้วยนะครับ  :-*

ขอบคุณครับ


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: ryanKung ที่ 25 พฤษภาคม 2007, 20:14:55
ไม่ได้ check authen ก่อนหรอคับ แล้วก็ไม่ต้องใช้ refer แต่เขียนให้อ่านแล้วเขียนไฟล์ให้เค้า save
ไม่รู้ใช่ที่ต้องการหรือป่าวคับ


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: MisterAoD ที่ 25 พฤษภาคม 2007, 21:34:50
ไม่ใช่ครับ เรื่อง authen เป็นเรื่องอื่นๆ ครับ

ผมอาจจะอธิบายไม่ชัดเจน เอาเป็นว่าอย่างนี้ดีกว่า

คุณเล่นเว็บไปจนถึงหน้านึง ผมก็แปะลิงค็ไปหาไฟล์บนเว็บผมบอกว่าไฟล์นี้นะ ดาว์นโหลดได้ที่นี่

พอ user คลิ๊กที่ลิงค์ปั๊บ เค้าก็จะได้โหลดไฟล์โดยอันที่จริงแล้ว มันมี script php เป็นคนคอยส่งไฟล์ให้ โดยสนธิกำลังกับ mod_rewrite

เช่นลิงค์บอกว่า download here เต้าก็จะถูกส่งไป --> htttp://mydemodomain.com/download/mihiro.avi

พอเค้า คลิ๊กปั๊บ เค้าก็จะโหลดแบบที่เค้าไม่รู้ตัวเลยว่า เค้ากำลังโหลดจาก php ไฟล์ซึ่ง script ที่ทำงานเบื้องหลังคือ

htttp://mydemodomain.com/download.php?file=mihiro.avi อะไรแบบนี้หนะครับ

ส่วนนี้ผมพอจะมั่วๆ ทำได้แล้วครับ (ก็ลอกเค้ามาอะแหละ แฮะๆๆๆ :D) แต่ติดปัญหาที่ว่า

ถ้า user เรียก htttp://mydemodomain.com/download/mihiro.avi ตรงๆ เค้าก็โหลดได้เหมือนกัน

ซึ่งผมไม่อยาก ซึ่งผมไม่อยากให้เป็นงั้นครับ เพราะผมต้องการ track ข้อมูลบางอย่าง เพื่อเอาไปเขียนรายงานหนะครับ

จะให้ check referer มันก็อ่อนเกินไปหนะครับ แก้ง่ายมาก เลยอยากจะหาทางอื่นครับ

เพราะอย่างนึงคือผมอยากจะประยุกต์ตัวนี้ ไปใช้ในการเก็บข้อมูล แบบว่า ไม่ใช่แค่ download อย่างเดียว เราสามารถใช้ในการเรียกดู html page ธรรมดาก็ได้ไงครับ

ผมเลยคิดไม่ตก  ???


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: myong1 ที่ 25 พฤษภาคม 2007, 22:05:48
ใช้ session หรือ cookies ซิครับ

โดยถ้าไม่ได้เข้าผ่านเว็บเรา จะไม่มี session ก็ load ไม่ได้ ประมาณนี้นะครับ

ส่วน code php ผมไม่ได้นะครับ ผมเขียนแต่ฝั่ง micorsoft อย่างเดียวเลย

แต่หลักการน่าจะเหมือนกัน


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: Tee++; ที่ 25 พฤษภาคม 2007, 22:23:33
ใน Folder Download ใส่ไฟล์ .htaccess ไว้ เขียนว่า

Deny from all หรือจะ Redirect ไปหน้าแจ้ง Error อะไรก็ได้

ทำแบบนี้เราจะเรียกผ่านตรงๆ ไม่ได้เลย ต้องเรียกผ่าน สคริปต์ที่ใช้อ่านเท่านั้น เอา php หรือ curl มาอ่าน ถ้าใช้ curl เราสามารถทำ Resume ยังได้

ง่ายมั้ย อุอุ  :)


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: MisterAoD ที่ 25 พฤษภาคม 2007, 22:47:36
นี่แหละครับคุณตี๋ ปัญหามันอยู่ตรงนี้ครับ

จากตัวอย่างข้างบน htttp://mydemodomain.com/download.php?file=mihiro.avi

ที่ user จะเห็น คือ htttp://mydemodomain.com/download/mihiro.avi ใช้ปะครับ

มันเกิดจากการ rewrite download/mihiro.avi --> download.php?file=mihiro.avi ซึ่ง directory download ไม่มีอยู่จริงครับ ยกตัวอย่างว่า ไฟล์จริงๆ ผมเก็บไว้ที่ directory ชื่อ files อย่างนี้ดีกว่าครับ

โค๊ด:
   +[root]
   |
   +[files]
   |   + mihiro.avi
   |   |
   |   + miho.avi
   |
   + download.php
   |
   + index.php

เวลา user เขาเข้ามาเคาจะรับรู้ว่า web เรามันเป็นอย่างนี้ ซึ่งเกิดจากการ rewrite url และใช้ php ในการให้ดูไฟล์
โค๊ด:
   +[root]
   |
   +[download]
   |   + mihiro.avi
   |   |
   |   + miho.avi
   |
   + index.php

แต่ผมไม่อยากให้ user เค้าอยู่ดีๆ แล้วมาเปิด htttp://mydemodomain.com/download/miho.avi ตรงๆ แล้วดูไฟล์ได้ครับ

เพราะการเรียกแบบนี้ตาม script ผมถือว่าถูกต้องเพราะมันก็จะ rewrite แล้วสุดท้ายก็เรียก htttp://mydemodomain.com/download.php?file=miho.avi มาให้ user อยู่ดี

ผมต้องการ block ไม่ให้เค้าเปิด htttp://mydemodomain.com/download/miho.avi ตรงๆ ครับ

ถ้าใช้ session เค้ายังไม่ปิด browser session เค้าก็ยังถูกต้องอยู่ใช่ไหมครับ เค้าก็เรียกได้อยู่ดี

ถ้าใช้คุกกี้ ผมก็ไม่รู้จะอบให้เค้ากินยังไงครับ เลยคิดไม่ตก

ใครจะพอชี้ทางสว่างให้ผมได้อ่า...  :-*


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: Tee++; ที่ 25 พฤษภาคม 2007, 23:02:32
จริงๆ แล้ว งงๆ นิดหน่อยอ่ะ ไม่ค่อยเข้าใจ คือว่าถ้า ไม่ให้ user เปิดจาก

htttp://mydemodomain.com/download/miho.avi
หรือ
htttp://mydemodomain.com/download.php?file=mihiro.avi

แล้วลิ้งก์ไหนครับ ที่ user จะโหลด หรือว่า user จำเป็นต้องอยู่ในหน้าใดหน้านึงของเราก่อน แล้วจะมาโหลด ได้ โดยไม่สามารถเอา link ไปแปะนอกสถานที่ได้ แบบนั้นก็ยังคิดออกแค่ Refer เองอ่ะ ถ้าไม่อยากให้โหลดผ่าน โปรแกรมก็เช็ค user agent แต่ก็อย่างว่าแหละ ของพวกนี้มันปลอมกัน ได้ แต่จะมีสักกี่รายเชียว

เอ่อ แล้วไฟล์ miho นี่มันไฟล์อะไรครับ ชื่อคุ้นๆแฮะ 555+


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: NongNatty ที่ 25 พฤษภาคม 2007, 23:10:22
ก็ดัก htaccess แล้วรับ request ถ้าไม่ใช่ request file ก็ไป google เลย


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: MisterAoD ที่ 25 พฤษภาคม 2007, 23:25:54
user จำเป็นต้องอยู่ในหน้าใดหน้านึงของเราก่อน แล้วจะมาโหลด ได้ โดยไม่สามารถเอา link ไปแปะนอกสถานที่ได้

แบบนี้แหละครับที่ต้องการ แล้วก็ไม่ใช่แค่แปะนอกสถานที่อย่างเดียวครับ เรียกตรงๆ จาก browser ก็ต้องไม่ได้ด้วยครับ

---

ส่วนของคุณน้องแน็ตตี้นั้น ประเด็นมันอยู่ที่ว่าทุกอันที่เรียกมันเป็นไฟล์หมดหนะสิครับ

มันผ่านในส่วนของเรื่องว่ามีไฟล์รึเปล่าแล้วครับ ตรงนั้นมันจบตั้งแต่ rewrite url แล้วใช่ไหมครับ

ปัญหาที่ตามมาเลยติดที่ว่า ไฟล์หนะมีจริงๆ แต่ไม่อยากให้โหลดโดยการเรียก script ตรงๆ เพราะ user ไม่มีทางรู้เลยว่าเราเก็บไฟล์ไว้ใน directory files เค้าจะรับรู้แค่ว่าไฟล์ที่เค้าโหลดอยู่ใน directory download ซึ่งเกิดจาก script ของเรา + mod_rewrite ไงครับ

---

ปัญหาของผมตอนนี้คือถ้าเช็คแค่ referer มันก็อ่อนจริงๆเลย

จะทำยังไงให้แก้ตรงนี้ได้ครับ เฮ้อกลุ้ม....  :-\

ต้องขออภัยด้วยครับที่ทำให้ งง


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: NongNatty ที่ 25 พฤษภาคม 2007, 23:45:17
ถ้าผมเข้าใจถูกคือ ต้องการ protect การเรียกไฟล์ตรงๆ 1 กรณี ให้เรียกผ่าน script ที่เรากำหนดอย่างเดียว ก็คือ protect download/ ครับ โดยถ้าไม่ได้มาจากการ refer มา ไม่ให้โหลด ส่วนกรณีดักการ script ใช้วิธีดัก host ครับ


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: Tee++; ที่ 25 พฤษภาคม 2007, 23:50:03
แล้วแบบนี้ล่ะครับ

หน้าที่ต้องการให้ผ่าน ลงทะเบียน session
พอจะโหลด ลิ้งก์ที่ไปเรียกไฟล์ที่มี header สำหรับดาวน์โหลด เช็ค Session ถ้ามีให้ผ่าน ไม่มี ไม่อ่านไฟล์
โฟลเดอร์ที่เก็บไฟล์จริงๆ ใส่ .htaccess สำหรับ deny ไว้

เท่านี้ก็น่าจะกันได้ทุกทางแล้ว หรือผมเข้าใจผิดหว่า


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: 9korn ที่ 26 พฤษภาคม 2007, 00:05:29
ไม่แน่ใจว่าหมายถึง Prevent from "Hotlinking" หรือเปล่า
ไปเจอบทความเกี่ยวข้องกัน เป็นการเขียนกันใน .htaccess น่ะคับ

http://underscorebleach.net/jotsheet/2004/11/stop-image-hotlinking-tutorial-htaccess-apache (http://underscorebleach.net/jotsheet/2004/11/stop-image-hotlinking-tutorial-htaccess-apache)


อ้างถึง
#นามสกุลของไฟล์ที่ตรงตาม Condition#
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png)$ [NC]
RewriteCond %{HTTP_REFERER} !^$
#รายชื่อ refer จากเว็บที่ต้องการให้เข้าอ่านได้#
RewriteCond %{HTTP_REFERER} !ชื่อเว็บของเรา\.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines\.com [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
#บรรทัดนี้ redirect พวก hotlink ไปยังหน้าที่เราต้องการ (notice page)#
RewriteRule (.*) /view_image.shtml?/$1 [R,NC,L]



ลองดูครับ  :D :D


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: EThaiZone ที่ 26 พฤษภาคม 2007, 00:08:04
วิธีบล็อกไฟล์ตรงๆ ผมก็ว่ามีวิธีเดียว คือ
ดาว์นโหลดไฟล์ผ่าน php

http://www.sourcerally.net/Scripts/58-Download-files-as-attachments

แล้วตามพี่ตี๋บอกเลย
Deny from all  ไม่ก็รีไปหน้าอื่น

และสำหรับผมโดยส่วนตัว ไฟล์ดาว์นโหลดแนวนี้ เป็นผมๆ ไม่ใช่ modrewrite ในการสั่งรีไดเร็กอะ
น่าจะเขียน db มาเก็บค่า url จริงๆ แล้วแทนที่ค่าด้วยรหัสสุ่มไป จะ md5 ก็ได้
หรือกลัวเปลือง db ก็เล่นบ้านๆ
md5 สร้างไฟล์ txt แล้วเก็บ url ไว้ภายใน
แบบนี้ไม่กิน mysql แน่ๆ

 :)


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: MisterAoD ที่ 26 พฤษภาคม 2007, 00:28:11
แล้วแบบนี้ล่ะครับ

หน้าที่ต้องการให้ผ่าน ลงทะเบียน session
พอจะโหลด ลิ้งก์ที่ไปเรียกไฟล์ที่มี header สำหรับดาวน์โหลด เช็ค Session ถ้ามีให้ผ่าน ไม่มี ไม่อ่านไฟล์
โฟลเดอร์ที่เก็บไฟล์จริงๆ ใส่ .htaccess สำหรับ deny ไว้

เท่านี้ก็น่าจะกันได้ทุกทางแล้ว หรือผมเข้าใจผิดหว่า


อันนี้ก็ใช้ได้ครับคุณตี๋ แต่ผมก็มีปัญหาอีกว่า พอ user โหลดแล้ว session มันจะยังคงอยู่รึเปล่าครับ เพราะฉะนั้นเค้าก็สามารถเรียกตรงๆ อีกทีได้ รึเปล่าครับ (ผมไม่เคยใช้ session มาก่อนครับ อาจจะดูเอ๋อๆ แต่ผมเพิ่งหัดครับ แฮะๆๆ)

ซึ่งผมอยากให้เค้าเรียกได้ทีเดียวแล้วจบไป อยากโหลดอีกทีต้องไปคลิ๊ก link มาใหม่อีกรอบ

และที่เด็ดสุด คือ หน้าหลักเป็น html ธรรมดา การสร้าง session ที่หน้านี้จึงหมดสิทธิ เป็นไปได้ด้วยประการทั้งปวง

หลักจาก user คลิ๊กที่ link เท่านั้น script จึงจะเริ่มจัดการทั้งหมดที่ผมงงอยู่ตอนนี้ครับ

1. ตรวจว่ามาจากหน้าหลักของเรารึเปล่า อันนี้ตรวจด้วย referer ใช่ไหมครับ อ่อนมากผนน่าจะพอมั่วได้ ถ้าถูกต้องทำข้อ 2 ถ้าไม่ถูกก็จบไป ไปไหนก็ไป

2. ตรวจ x อีกทีเพื่อป้องกัน referer ที่มาจาก tampered header ถ้าผ่าน ก็ไปโหลดไฟล์ ถ้าไม่ผ่านก็จบไป ไปไหนก็ไป

ไอ้ x นี่แหละครับ ที่ผมคิดไม่ออกว่าจะเอาอะไรดี แล้วจะต้องตรวจอะไรยังไง เพราะถ้าให้เป็น session start ที่ข้อ ศูนย์ แล้ว จบ session end ที่ข้อสาม ปัญหาที่ตามมาก็คือ ถ้าไฟล์ที่ผมเรียก เป็น mihiro.html ไปเรียก mihiro1.gif mihiro2.gif ... mihiro999.gif อีกบานตะเกียงมันจะทำได้ไหมครับ เพราะ session มันจบไปแล้ว เฮ้อ งงตัวเอง ทำไมมันยุ่งอย่างนี้เนี่ย....  :-X

---

ส่วนของคุณน้องแน็ตตี้ครับ ท่อนหลังผมงงครับ ไม่เข้าใจ  ??? --> ส่วนกรณีดักการ script ใช้วิธีดัก host ครับ

----

คุณนายกรครับ ไม่ใช่ hotlink ครับ ขอบคุณมากครับ

----

คุณอีไทยโซนครับ มันไม่ใช่แค่การให้โหลดครับ แต่ serve หน้าเว็บเป็นหน้าเลยครับ

ต้องขออภัยที่ผมอาจจะทำให้สับสน เพราะผมเองก็เริ่มสับสนเอง ไม่สิสับสนมาตั้งกะต้นละ เ้ง้อ....

ดูภาพนี้ประก่อบนะครับ

โค๊ด:
+[root]
|
+[files]
|  |
|  +mihiro.html
|  |
|  +mihiro1.gif
|  |
|  +mihiro2.gif
|  |
|  +miho.html
|  |
|  +miho2.gif
|  |
|  +miho8.gif
|
+showseo.php
|
+index.html

ที่หน้า index.html จะมี link ไปสองที่คือ http://www.สักอย่าง.com/showseo/mihiro.html กับ http://www.สักอย่าง.com/showseo/miho.html

โดยพอ user คลิ๊กที่ link แล้วสคริป์ showseo.php ของเราจะไปดึงไฟล์มาแสดงอย่างที่งงๆ กันไปแล้วตามข้างบนหนะครับ

เพราะฉะนั้น user บ้ากามของเราก็จะรู้แค่ว่าเว็บ สักอย่าง.com นี่นะมันมีโครงสร้างเป็นอย่างนี้

โค๊ด:
+[root]
|
+[showseo]
|  |
|  +mihiro.html
|  |
|  +mihiro1.gif
|  |
|  +mihiro2.gif
|  |
|  +miho.html
|  |
|  +miho2.gif
|  |
|  +miho8.gif
|
+index.html

แล้ว...

เออ นั่นสิ ผมอยากรู้อะไรนี่ งงไปแล้ว.... เง้อ......  :-X


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: Tee++; ที่ 26 พฤษภาคม 2007, 01:01:50
งงแล้วอ่ะ เมาแล้วด้วย -_-" เริ่มเยอะแล้วมึนครับ

รู้แต่ว่าการทำให้ไฟล์ html สร้าง session ก็มีทางนะ ใช้ Ajax ไงล่ะ เรียก โหลดเพจปุ๊บ ไปเรียกไฟล์ Ajax มาลงทะเบียน Session อื่นๆ งงจริงๆ ครับ ขอบอก 555++


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: icez ที่ 26 พฤษภาคม 2007, 01:15:16
อย่างที่คุณตี๋บอกครับ ถ้าจะ track แบบ 99.99% เลยก็ต้องทำให้หน้าแรกเก็บ session ได้ด้วย
เก็บ ip / เวลาไว้ แล้วภายใน 10 นาที (โดยประมาณ) ถ้าไม่มีการ click link ไปหน้าอื่นต่อก็ให้ยกเลิก session
พอคลิกมาปุ๊ป check ip / เวลา จาก session แล้วก็ check referer
เสร็จพอผ่านหมด ทำลาย session ทิ้งครับ


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: EThaiZone ที่ 26 พฤษภาคม 2007, 06:02:50
ผมเองก็เคยเขียน session ไว้กันฮอทลิงค์ไฟล์โดยตรง

ของผมแค่ 20 วิ เพราะกันไฟล์เพลงออนไลน์


หัวข้อ: Re: ถามเรื่อง php ครับ ช่วยผมที
เริ่มหัวข้อโดย: MisterAoD ที่ 26 พฤษภาคม 2007, 07:06:16
ขอขอบคุณทุกท่านมากเลยครับ ที่เข้ามาช่วยตอบปัญหาของผม

ตอนนี้ผมขอกลับไปรวบรวมสติก่อนนะครับ

เดี๋ยวขอลองทำอีกรอบก่อนครับ ไม่ต้องห่วงครับ เรื่องนี้ยังไม่จบ

ถ้าติด มันจะกลับมาอีกครั้อง  ;D

เอาให้งงหนักกว่าเดิม อีก  :D