okgofun
ก๊วนเสียว
พลังน้ำใจ: 1
ออฟไลน์
กระทู้: 396
|
 |
« เมื่อ: 01 ตุลาคม 2007, 11:16:13 » |
|
curl เวลาดึงเว็บใดๆ มันจะดึงค่า session,cookie ของเว็บนั้นมาด้วยใหมครับ หรือว่าก็ไม่สามารถใช้งานได้อยู่ดี เพราะค่า session จะต้องถูกเก็บไว้ที่ server ของเขา แต่ถึงดึงมาได้เราก็รู้ไม่ได้อยู่ดีใช่ปะครับ ว่ามันมีค่าอะไร เพราะอยู่ที่ฝั่ง server นั้น คงเรียกออกมาทาง header ไม่ได้ใช่ปะครับ  เอ่อ ว่าแต่ curl มันกำหนดให้สร้าง session หรือ cookie ก่อนเข้าใช้งาน url ต่างๆได้ใหมครับ แบบว่าสวม session,cookie ยัดเข้าไปเลยอะ เอาให้เนียน 
|
|
« แก้ไขครั้งสุดท้าย: 01 ตุลาคม 2007, 13:09:30 โดย okgofun »
|
บันทึกการเข้า
|
จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
|
|
|
amaudy
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 9
ออฟไลน์
กระทู้: 1,212
|
 |
« ตอบ #1 เมื่อ: 01 ตุลาคม 2007, 11:32:33 » |
|
hxxp://codersshack.com/forums/php_11/curl-libcurl-login-functions_30.html hxxp://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html
|
|
|
บันทึกการเข้า
|
|
|
|
myong1
สมุนแก๊งเสียว
พลังน้ำใจ: 33
ออฟไลน์
กระทู้: 569
|
 |
« ตอบ #2 เมื่อ: 01 ตุลาคม 2007, 12:06:50 » |
|
ส่วนที่ยากที่สุดของการ post แบบ coding ก็คือตรงจุดนี้แหละครับ ตอนนี้ผมยังไม่ได้ใช้ php แต่หลักการน่าจะเหมือนกัน 1.ต้องรู้ค่าตัวแปรต่าง ๆ ในการส่งไปซะก่อน โดยตอนนี้ผมใช้ extension ของ firefox ตัว web developer และอีกตัว live http headers ในการตรวจสอบค่าต่าง ๆ ลอง search ดูละกันครับ หาเจอแน่นอนครับ 2.ต้องรับค่า cookies มาก่อน ซึ่งส่วนใหญ่จะรับตอน log in นั่นแหละครับ ถ้าผมจำไม่ผิดตัว curl จะมีวิธีเก็บ cookies เข้า text file ได้ครับ ส่วน session ไม่มีปัญหาครับ เพราะมันเก็บไว้อยู่ใน server อยู่เดียว เพียงแต่เข้าให้ถูกขั้นตอนก็ได้อยู่แล้ว เช่นต้อง login ก่อน และค่อย post ประมาณนี้ครับ แต่ที่ยากที่สุดเห็นจะเป็น captcha มากกว่าครับ เท่าที่ลองดูจะมีหลายที่ถ้า post ไป 4-5 ทีจะให้เราใส่ captcha ทุกครั้ง ตรงนี้คงหมดสิทธ์ ต้อง manual สถานเดียว 
|
|
|
บันทึกการเข้า
|
|
|
|
okgofun
ก๊วนเสียว
พลังน้ำใจ: 1
ออฟไลน์
กระทู้: 396
|
 |
« ตอบ #3 เมื่อ: 01 ตุลาคม 2007, 12:11:04 » |
|
hxxp://codersshack.com/forums/php_11/curl-libcurl-login-functions_30.html hxxp://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html
ผมลอง curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); ลองแล้วไม่เห็นมัน สร้างค่าใดๆไว้ใน cookie.txt เลยอะครับ เป็นไฟล์ว่างๆเหมือนเดิม เหมือนมันไม่ได้รับค่า session,cookie เลยอะ ผมเทสกับเว็บเพจที่สร้าง session ไว้ด้วยหนะครับ ปล.ทดสอบใน localhost
|
|
|
บันทึกการเข้า
|
จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
|
|
|
okgofun
ก๊วนเสียว
พลังน้ำใจ: 1
ออฟไลน์
กระทู้: 396
|
 |
« ตอบ #4 เมื่อ: 01 ตุลาคม 2007, 12:17:53 » |
|
อ๊ะ โทษทีครับ เจอละ ค่ามันเซฟไว้ที่ path ใน apache
เอ? แต่เหมือนว่ามันมีแต่ค่า session_id แค่นั้นเองหนะครับ ทั้งๆที่ไฟล์นี้มีค่า cookie , session อื่นๆอีก แต่ไม่เห็นมันเซฟไว้แฮะ
|
|
|
บันทึกการเข้า
|
จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
|
|
|
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 321
ออฟไลน์
กระทู้: 12,518
|
 |
« ตอบ #5 เมื่อ: 01 ตุลาคม 2007, 12:25:55 » |
|
ส่วนตัวผมเล่น fsockopen เขียน header ส่งเองไปเลย ขอบอกว่าลำบาก แต่ทำงานเร็วกว่า  ----------------------------- Session ยังไงๆ ก็อยู่เซิร์ฟครับ เราไปเอามาไม่ได้หรอก ส่วน Cookies นะ เอามาได้ครับ เพราะเขาต้องส่งมาอยู่แล้ว
|
|
|
บันทึกการเข้า
|
|
|
|
okgofun
ก๊วนเสียว
พลังน้ำใจ: 1
ออฟไลน์
กระทู้: 396
|
 |
« ตอบ #6 เมื่อ: 01 ตุลาคม 2007, 12:33:46 » |
|
ส่วนตัวผมเล่น fsockopen เขียน header ส่งเองไปเลย ขอบอกว่าลำบาก แต่ทำงานเร็วกว่า  ----------------------------- Session ยังไงๆ ก็อยู่เซิร์ฟครับ เราไปเอามาไม่ได้หรอก ส่วน Cookies นะ เอามาได้ครับ เพราะเขาต้องส่งมาอยู่แล้ว fsockopen สามารถสร้าง session ส่งไปได้ใหมครับ (สงสัยไม่ได้อยู่ดีมั้ง ไม่งั้นแกล้งเขียนเล่นกันเต็มเตไปหมดแน่) เอ? หรือว่าปรกติ เวลาดึงด้วย curl ยังไงซะค่า session ต่างๆของเพจที่ดึงก็ต้องสร้าง session เอาไว้อยู่ดี เราไม่ต้องไปทำอะไร สงสัยต้องลอง เฮ้ออออ
|
|
|
บันทึกการเข้า
|
จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
|
|
|
minute1
ก๊วนเสียว
พลังน้ำใจ: 2
ออฟไลน์
กระทู้: 385
|
 |
« ตอบ #7 เมื่อ: 01 ตุลาคม 2007, 12:37:50 » |
|
Session ยังคงต้องพึ่ง Cookies เพื่อเก็บค่า SessionID ครับ ถ้าไม่ใช้ cookies ต้อง rewrite sessionid ไปกับ URL เท่านั้นครับ
|
|
|
บันทึกการเข้า
|
|
|
|
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 321
ออฟไลน์
กระทู้: 12,518
|
 |
« ตอบ #8 เมื่อ: 01 ตุลาคม 2007, 12:57:34 » |
|
fsockopen ต่างกัน curl ตรง 1. ต้องเขียน header ส่งไปเอง 2. ทำงานเร็วกว่า ไม่มีค้าง (ถ้าเขียน connection ผิดมีค้างเติ่งครับ) นอกนั้นเหมือนกันหมดแหละครับ เป้าหมายเหมือนกัน - fsockopen สามารถสร้าง session ส่งไปได้ใหมครับ ได้ก็ดีสิครับ 
|
|
|
บันทึกการเข้า
|
|
|
|
okgofun
ก๊วนเสียว
พลังน้ำใจ: 1
ออฟไลน์
กระทู้: 396
|
 |
« ตอบ #9 เมื่อ: 01 ตุลาคม 2007, 13:04:14 » |
|
สมมุตินะครับ หลักๆของโปรเจคที่จะทำ มันไม่ได้ซักที  เราทำระบบ มี server อยู่คนละที่ web a.com มีหน้า login แล้วพอ login เสร็จมันต้อง session_register username และ password และข้อมูลอีกแค่ไม่กี่ตัว อาจบันทึกลง session เอาไว้เป็น data web b.com ของเราต้องการใช้ curl เพื่อทำการ login เข้าไปใน a.php แล้วทีนี้ ถ้าผมต้องการค่า session ใน username,password,data ผมจะเอาค่ามาใช้ได้ยังไงอะครับ นี่หละปัญหา ลอง echo $_SESSION['username'] ; มันก็ไม่ออกอะครับ ขอคำแนะนำทีเถิดครับ จนปัญญาและ 
|
|
|
บันทึกการเข้า
|
จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
|
|
|
payu
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 125
ออฟไลน์
กระทู้: 1,887
|
 |
« ตอบ #10 เมื่อ: 01 ตุลาคม 2007, 15:26:27 » |
|
คิดว่าทำไม่ได้ครับ
server จะแยก session ของแต่ละ client ออกจากกัน และไม่อนุญาตให้อ่านข้อมูลของ client อื่นได้โดยเด็ดขาด (เรื่องความปลอดภัยน่ะครับ)
ทางออกน่าจะเป็นการใช้ web service มากกว่า ถ้าหมายถึง a.com เป็นระบบที่ให้เราต้องการให้บริการในการ authenticate user เดียวกันจากหลาย client
แต่ถ้าเรา a.com ไม่ใช่ของเรา ... ก็มีทางออกอีกทางครับ โดยการให้ client 1 ส่ง session id ไปให้ client 2 เพื่อ fake client (take over) โดยต้องขึ้นอยู่กับวิธีการที่ a.com เก็บ session id ด้วยครับ - ถ้าเก็บโดยใช้ cookie ก็สามารถให้ client 1 ส่ง session id ไป client 2, client 2 fake cookie แล้ว access - ถ้าใช้ผ่าน session id ทาง url ก็ง่ายหน่อย fake ใน url ได้เลย
แต่ก็ยังมีัปัญหาอีกครับ ถ้า server ตรวจสอบ session id กับเทคนิคการเข้ารหัส client ip address ก็คงจะหมดสิทธิครับ
|
|
|
บันทึกการเข้า
|
|
|
|
amaudy
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 9
ออฟไลน์
กระทู้: 1,212
|
 |
« ตอบ #11 เมื่อ: 01 ตุลาคม 2007, 18:13:23 » |
|
งั้นผมขอเสนอวิธีนี้ ไม่รู้ว่าเป็นไปได้หรือเปล่านะครับ คิดได้ออกตอนอาบน้ำ ยังไม่ได้ลองทำ (และยังไม่มีเวลาทดลองตอนนี้ด้วยครับ)
ใช้เรื่องการเข้ารหัสเข้าช่วยครับ
กรณีที่ ๑ ให้ เครื่อง A และ B ถือตัวแปรที่เป็น "รหัสลับ" (Secret key) ไว้เหมือนกัน - เครื่อง A เมื่อทำการล็อกอินเข้าระบบเรียบร้อยแล้ว เอาข็อมูลที่ต้องการส่งไปให้เครื่อง B เข้ารหัสด้วย mcrypt_encrypt() เตรียมส่งให้เครื่อง B ด้วยวิธี GET ธรรมดาๆ (ผ่านลิงค์) - เครื่อง B ได้ข้อมูลที่ผ่านการเข้ารหัส ที่ส่งจากเครื่อง A ก็ทำการถอดรหัสด้วย mcrypt_decrypt() เมื่อถอดข้อมูลออกมาแล้ว ก็นำไปตรวจสอบความถูกต้องต่อไป อาจจะเพิ่มการตรวจสอบ IP หรือวิธีการอย่างอื่นร่วมด้วย เพื่อเพิ่มความปลอดภัย
วิธีนี้ ความเสี่ยงขึ้นอยู่กับว่า หาก "รหัสลับ (Secret key)" หลุดรอดออกไป ผู้ประสงค์ร้ายจะสามารถถอดรหัส เพื่อดูข้อมูลที่เครื่อง A ส่งให้เครื่อง B
กรณีที่สอง Private key, Public key (ไม่ลงลึกถึงวิธีการนะครับ ยังไม่ได้ค้นข้อมูลเพิ่มเติม) - เครื่อง A สร้างรหัสขึ้นมา ๒ ชุด โดย ชุดแรก Private key เก็บไว้ที่เครื่อง A เพื่อให้ใช้เข้ารหัสข้อมูล ชุกชุดที่สอง Public key มอบให้ เครื่อง B เพื่อให้เครื่อง B ตรวจสอบความถูกต้อง - เครื่อง A เข้ารหัสข้อมูลที่ต้องการส่งไปหาเครื่อง B โดยใส่รหัส Private key เข้าไปด้วย แล้วส่งข้อมูลที่ผ่านการเข้ารหัสแล้ว ให้กับเครื่อง B โดยวิธี GET หรือ POST ก็ได้ - เครื่อง B เมื่อได้รับข้อมูล ที่ผ่านการเข้ารหัสจากเครื่อง A มาทำการตรวจสอบ ด้วย Public key ของเครื่อง A ด้วยวิธีการนี้ เครื่อง B จะทราบรู้เพียง ข้อมูลที่ได้มาจากเครื่อง A เป็นจริงหรือเท็จ ความเสี่ยงของวิธีนี้คือ เครื่อง A ต้องเก็บ Private key ไว้ดีๆ ถ้าหลุดไปอยู่ในมือผู้ไม่หวังดี ก็จบ
ถ้าผมเข้าใจอะไรคาดเคลื่อนไป จักเป็นพระคุณอย่างมาก หากท่านจะโต้แย้งกลับมาด้วยจิตเมตตา
อ๊อด
|
|
« แก้ไขครั้งสุดท้าย: 01 ตุลาคม 2007, 18:16:18 โดย amaudy »
|
บันทึกการเข้า
|
|
|
|
myong1
สมุนแก๊งเสียว
พลังน้ำใจ: 33
ออฟไลน์
กระทู้: 569
|
 |
« ตอบ #12 เมื่อ: 01 ตุลาคม 2007, 18:55:25 » |
|
ผมยังไม่เข้าใจส่วนที่คุณ okgofun บอกอย่างชัดเจนนัก แต่หลักการของ session นั้น server จะเป็นตัวเก็บข้อมูล และจะมี id cookies อยู่ที่เครื่องแบบที่คุณ minute1 บอกนั่นแหละครับ ฉะนั้นค่าที่เราสามารถเก็บได้จะเป็น id cookies ซึ่งถ้าเราเอา cookies ตัวนี้ไปใช้ก่อน session expired เราก็จะได้ session ชุดนั้นมา สรุปคร่าว ๆ ถ้าจะ post ส่งข้อมูลไปต้องมี 1.ค่าตัวแปรต่าง ๆ ทั้งจาก textbox,hidden field และอื่น ๆ 2.cookies บนฝั่ง browser 3.id cookies ที่ชี้ข้อมูล session ชุดนั้น ๆ ก็ cookies นั่นแหละ 4.file ที่ run ข้อมูลจริง ๆ บางครั้งมันจะมี redirect ไปยัง file ที่ run จริง ๆ อยู่ อันนี้ต้องใช้ live http headers จะเห็นชัดเจน 
|
|
|
บันทึกการเข้า
|
|
|
|
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 321
ออฟไลน์
กระทู้: 12,518
|
 |
« ตอบ #13 เมื่อ: 01 ตุลาคม 2007, 19:47:46 » |
|
จากที่ผมอ่านคำถามของคุณ okgofun แล้ว สรุปที่ต้องการคือต้องการให้ session ของ a.com สามารถดูใน b.com ด้วยใช่หรือไม่ครับ ? มีวิธีหนึ่งครับคือ 1. คุณต้องสร้าง session ตัวหนึ่งไว้เป็น session กลางที่ใช้ตรวจสอบบุคคลไว้ 2. คุณก็เอา session ทั้งหมดใน a.com เข้า mysql ส่วนกลางไว้ก่อนที่ b.com สามารถเข้าถึงได้ด้วย 3. คุณก็ส่ง session ข้อ1ลงไปใน cookies ส่งไปที่ b.com เลย ซึ่งก็คือต้องใช้คำสั่ง setcookie ส่งค่าข้ามโดเมน setcookie("TestCookie", "ค่าคุ๊กกี้", time()+3600, "", " .b.com"); สังเกตที่ตัวหนานะครับ นั้นแหละ 4. ที่นี้ที่ b.com คุณก็ต้องเขียนระบบให้มันอ่านคุ๊กกี้เอาค่าตรวจสอบเนี่ย ไปเทียบกับที่เก็บไว้ใน mysql แล้วเรียกออกมา ที่นี้คุณก็น่าจะสามารถส่งต่อค่าข้ามเว้บได้แล้วครับ ถ้าผมเข้าใจจุดประสงค์ถูกนะครับ 
|
|
« แก้ไขครั้งสุดท้าย: 01 ตุลาคม 2007, 20:13:32 โดย EThaiZone »
|
บันทึกการเข้า
|
|
|
|
ball6847
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 212
ออฟไลน์
กระทู้: 4,174
|
 |
« ตอบ #14 เมื่อ: 01 ตุลาคม 2007, 20:11:27 » |
|
อ่านแล้วงงดีแฮะ cookie พอรู้เรื่อง แต่ session นี่โคตรปวดหัวเลย 
|
|
|
บันทึกการเข้า
|
|
|
|
minute1
ก๊วนเสียว
พลังน้ำใจ: 2
ออฟไลน์
กระทู้: 385
|
 |
« ตอบ #15 เมื่อ: 01 ตุลาคม 2007, 21:16:03 » |
|
อ้าว... ตกลงนี่เขียนโปรแกรมเองทั้งสองฝังเลยใช่ไหม? ถ้าอย่างนั้นมันขึ้นกับการ Design ของตัวคุณเองแล้วละ วิธีการเยอะแยะ เลือกอันที่มันง่ายซิ ทำไมทำยากจัง ใช้ Database อย่างคุณ EThaiZone ก็เสร็จแล้ว ถ้าอย่างยากใช้แบบสองของคุณ amaudy ต้องทำ certified ทั้งสอง host แล้วแลก certified กัน secure สูงมาก พวก Software ของ bank จะใช้แบบนี่ละ รู้สึกเขาจะเรียกว่า Three-way handshake มัง ผมเอาง่ายๆดีกว่าปวดหัวแทน 
|
|
|
บันทึกการเข้า
|
|
|
|
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 321
ออฟไลน์
กระทู้: 12,518
|
 |
« ตอบ #16 เมื่อ: 01 ตุลาคม 2007, 22:24:32 » |
|
ถ้าอย่างยากใช้แบบสองของคุณ amaudy ต้องทำ certified ทั้งสอง host แล้วแลก certified กัน secure สูงมาก พวก Software ของ bank จะใช้แบบนี่ละ รู้สึกเขาจะเรียกว่า Three-way handshake มัง
ลองหาพวก encrypt แบบชนิดต้องมีคีย์ไว้ใช้เข้า/ถอดรหัสมาใช้ดูสิครับ เห็นมีเป็น class หลายตัว เอามาฝากเผื่ออยากจะทำ http://www.phpclasses.org/browse/class/20.html รับรอง อย่างมันส์ครับ 
|
|
|
บันทึกการเข้า
|
|
|
|
amaudy
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 9
ออฟไลน์
กระทู้: 1,212
|
 |
« ตอบ #17 เมื่อ: 01 ตุลาคม 2007, 23:58:24 » |
|
^ ^ ^  แจ๋วเลย
|
|
|
บันทึกการเข้า
|
|
|
|
okgofun
ก๊วนเสียว
พลังน้ำใจ: 1
ออฟไลน์
กระทู้: 396
|
 |
« ตอบ #18 เมื่อ: 02 ตุลาคม 2007, 12:27:23 » |
|
อ่ามัวแต่อ่านหนังสือ เลยไม่ได้เข้ามาดู
ของคุณทุกๆคนมากๆครับ กับไอเดียดีๆ
เอ่อ แบบที่คุณ Ethaizone เข้าใจคำถามผมนั้นถูกต้องแล้วครับ อยากรับค่าจาก session อีกจาก server แต่อ่านวิธีการของหลายๆท่านทำให้เข้าใจได้ว่า คงไม่มีทางดึงค่าตรงๆจาก session ของ server อีกเครื่องได้นี่เอง(เรื่องความปลอดภัย)
งั้นคงต้องประยุกข์วิธีการตามที่พี่ท่านแนะนำกันมา ขอบพระคุณมากครับ
|
|
|
บันทึกการเข้า
|
จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
|
|
|
amaudy
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 9
ออฟไลน์
กระทู้: 1,212
|
 |
« ตอบ #19 เมื่อ: 02 ตุลาคม 2007, 12:35:52 » |
|
โชคดีครับ เพื่ออนาคตของชาติ ต้องช่วยๆกันครับ
|
|
|
บันทึกการเข้า
|
|
|
|
|