เปลี่ยนเส้นทางปริมาณการใช้งานเว็บทั้งหมดผ่าน TLS โดยไม่ใช้ VPN


10

สมมติฐาน:

เซิร์ฟเวอร์:

  • ฉันมีเซิร์ฟเวอร์ Debian Squeeze ที่สามารถออกสู่อินเทอร์เน็ตสาธารณะด้วยที่อยู่ IPv4 แบบคงที่
  • ฉันมีสิทธิ์เข้าถึงแบบไม่ จำกัด เพื่อแก้ไขซอฟต์แวร์บนเซิร์ฟเวอร์
  • เซิร์ฟเวอร์สามารถฟังพอร์ตต่าง ๆ ตั้งกฎของไฟร์วอลล์ใหม่โดยทั่วไปไม่มีข้อ จำกัด เกี่ยวกับสิ่งที่เซิร์ฟเวอร์สามารถทำได้

ลูกค้า:

  • ฉันสามารถเรียกใช้โปรแกรม Firefox, Java, โปรแกรม .NET และบาง executables พื้นเมืองที่ไม่จำเป็นต้องมีการเข้าถึงผู้ดูแลระบบบนของท้องถิ่นระบบ (กล็อคลงสก์ท็อป Windows ด้วยสิทธิผู้ดูแลระบบไม่ได้)
  • ฉันสามารถติดตั้ง Addons ลงใน Firefox ได้
  • ฉันสามารถฟังพอร์ตใดก็ได้บนlocalhostอินเทอร์เฟซแบบวนรอบ ( ) ดังนั้นโปรแกรมดังกล่าวสามารถผูกกับพอร์ตท้องถิ่นและดำเนินการเครือข่าย I / O โดยพลการโดยไม่ต้องผ่านพร็อกซี
  • การเข้าถึงอินเทอร์เน็ตสาธารณะทั้งหมดจะถูกกำหนดเส้นทางผ่านพร็อกซี HTTP ที่ จำกัด ซึ่งบล็อกเว็บไซต์จำนวนมากและทำการตรวจสอบสถานะอย่างระมัดระวัง บนพอร์ต 80 อนุญาตเฉพาะ HTTP (ไม่มี TLS / SSL) บนพอร์ต 443 อนุญาตให้CONNECTใช้ SSL / TLS ตามโฮสต์ระยะไกลซึ่งไม่ได้ถูกบล็อกโดยชื่อโดเมน / ที่อยู่ IP
  • พร็อกซี HTTP ที่ จำกัดไม่ได้ทำการตรวจสอบแพ็คเก็ตในระดับลึกของการเชื่อมต่อ TLS ซึ่งได้รับอนุญาตผ่านพร็อกซีและจะไม่ดำเนินการ Man ในการโจมตีระดับกลางในการเชื่อมต่อเหล่านั้น
  • เซิร์ฟเวอร์ที่กล่าวถึงข้างต้นที่ฉันเข้าถึงไม่ได้ถูกบล็อกโดยพรอกซี

เป้าหมาย:

ฉันต้องการที่จะเส้นทางทั้งหมด HTTP และ HTTPS คำขอปล่อยออกมาโดย Firefox, ผ่านเซิร์ฟเวอร์ดังกล่าวข้างต้นผ่าน SSL / TLS

หมายเหตุอื่น ๆ เกี่ยวกับ "เป้าหมาย":

  • แม้ว่าไซต์ปลายทาง (ตัวอย่างเช่นhttp://superuser.com) ไม่ได้ใช้ SSL / TLS กับเซิร์ฟเวอร์ของฉันฉันยังคงต้องการใช้ SSL / TLS จากไคลเอนต์ของฉันไปยังเซิร์ฟเวอร์ของฉันและให้เซิร์ฟเวอร์ของฉันทำการร้องขอ HTTP - ไม่ว่าจะเข้ารหัสหรือไม่ - - ไปยังปลายทางที่ต้องการ
  • ฉันไม่สนใจว่าเซิร์ฟเวอร์ของฉันดูที่ปริมาณการใช้งาน SSL "ชัดเจน" ในคำอื่น ๆ ที่ฉันไม่จำเป็นต้องมีการเข้ารหัสเต็มรูปแบบ end-to-end SSL https://google.comจากลูกค้าท้องถิ่นของฉันทุกทางกับเซิร์ฟเวอร์ระยะไกลถ้าเซิร์ฟเวอร์ระยะไกลจะถูกเข้าถึงได้โดยเช่น กล่าวอีกอย่างก็คือฉันไว้วางใจเซิร์ฟเวอร์เพื่อรักษาความลับของข้อมูล
  • ฉันยินดีที่จะติดตั้งซอฟต์แวร์หรือส่วนเสริมของ Firefox ที่ไม่ต้องการสิทธิ์ผู้ดูแลระบบและสามารถทำงานบน Windows 7 แบบ 32 บิต
  • ซอฟต์แวร์โอเพ่นซอร์สเป็นที่ต้องการมากกว่ากรรมสิทธิ์และฟรีแวร์เป็นที่ต้องการมากกว่าซอฟต์แวร์ที่ต้องการค่าธรรมเนียมใบอนุญาต
  • ซอฟต์แวร์ที่มีอยู่เป็นที่ต้องการมากกว่าที่จะใช้รหัสซอฟต์แวร์ใหม่แม้ว่าฉันยินดีที่จะเขียนรหัสหากเป็นวิธีเดียว

ฉันกำลังมองหา "ทางออก" ที่อธิบายอย่างหลวม ๆ ซึ่งอธิบาย:

  • ลูกค้าต้องการซอฟต์แวร์อะไรบ้าง? หากมีแพ็กเกจซอฟต์แวร์เฉพาะที่คุณรับรู้ให้ตั้งชื่อมัน มิฉะนั้นอธิบายสิ่งที่ซอฟต์แวร์ของลูกค้าจะต้องทำ
  • จำเป็นต้องใช้ซอฟต์แวร์ใดบนเซิร์ฟเวอร์ หากมีแพ็กเกจซอฟต์แวร์เฉพาะที่คุณรับรู้ให้ตั้งชื่อมัน มิฉะนั้นอธิบายสิ่งที่ซอฟต์แวร์เซิร์ฟเวอร์จะต้องทำ
  • หากคุณตั้งชื่อแพคเกจซอฟต์แวร์เฉพาะด้านบนให้อธิบายว่าพารามิเตอร์การกำหนดค่าใดที่จำเป็นสำหรับการตั้งค่าเพื่อให้บรรลุเป้าหมาย
  • หากมีเหตุผลบางอย่างที่คุณเชื่อว่านี่เป็นไปไม่ได้อธิบายว่าทำไม

สิ่งที่ฉันพยายามที่ไม่ทำงาน

  • การติดตั้งsquidบนเซิร์ฟเวอร์ของฉันฉันพยายามตั้งค่าพร็อกซี HTTP มาตรฐานของตัวเองบนเซิร์ฟเวอร์ของฉัน สิ่งนี้ไม่ได้ผลเพราะเมื่อฉันขอเว็บไซต์ใน Firefox ผ่าน HTTP ปกติFirefox จะพยายามเข้าถึงเซิร์ฟเวอร์ของฉันผ่าน HTTP ปกติด้วยเช่นกัน! สิ่งนี้ไม่สามารถทำได้เนื่องจากพร็อกซีในเครือข่ายท้องถิ่นของฉันสามารถตรวจสอบและ / หรือบล็อกทราฟฟิก HTTP ปกติระหว่างไคลเอนต์ของฉันและเซิร์ฟเวอร์ได้
  • VPNs ใช้งานไม่ได้แม้แต่ OpenVPN ผ่าน TLS ที่ฟังพอร์ต 443 เพราะฉันไม่มีสิทธิ์ในคอมพิวเตอร์ที่จะติดตั้งtunอะแดปเตอร์เครือข่ายที่สามารถทำการกำหนดเส้นทางเลเยอร์ 3 ได้ฉันไม่สามารถกำหนดเส้นทางเลเยอร์ 2 ได้ (เช่นtap) กล่าวโดยย่อ: ฉันต้องการสิทธิ์ของผู้ดูแลระบบในการติดตั้ง OpenVPN และแม้ว่าฉันจะมีสิทธิ์ของผู้ดูแลระบบเหล่านั้นเป็นการชั่วคราว บริษัท ก็คงจะไม่ยินดีหากพวกเขาพบว่ามีการติดตั้ง โปรแกรม Java หรือ. NET นั้นสังเกตเห็นได้น้อยกว่ามากโดยเฉพาะเมื่อไม่ได้ติดตั้งใน Add / Remove Programs และไม่มีองค์ประกอบเคอร์เนลไดรเวอร์เช่น OpenVPN

คุณลองถุงเท้าไหม คุณสามารถกำหนดได้ที่พอร์ต 443 ในเซิร์ฟเวอร์ของคุณ
— Ashian

คุณสามารถใช้วิธีแก้ปัญหาที่อธิบายไว้ในบทความนี้: HTTP VPN ของคนจนได้หรือไม่? โปรดทราบว่าลิงก์ไปยังHTTPTunnelไม่ถูกต้อง
— harrymc

1
delegate.orgอาจช่วยได้
— Arjan

@Ashian ไม่ SOCKS จะไม่ทำงานเว้นแต่จะถูกห่อด้วย TLS SOCKS ไม่ได้เป็นโปรโตคอลที่ใช้ HTTP ดังนั้นเมื่อมันโดนพร็อกซีภายในมันจะถูกบล็อก และถ้าผมมีความสามารถที่จะเรียกใช้ผ่าน TLS ผมก็อาจจะใช้โปรโตคอลที่แตกต่างกัน ปัญหาแรกของฉันคือการตั้งค่าอุโมงค์ TLS ในลักษณะที่ Firefox สามารถใช้งานได้ ฉันยังไม่เห็นคำอธิบายของวิธีการดังกล่าว
— allquixotic

@harrymc: ชื่อคำถามว่าผ่าน TLS HTTP Tunnel กำหนดเส้นทางแพ็กเก็ต IP ผ่านHTTPซึ่งไม่ได้เข้ารหัสและไม่ใช้ TLS บทความบอกว่าการเชื่อมต่อไม่ได้เข้ารหัส ไม่มีทางที่พร็อกซีของฉันจะปล่อยให้ผ่าน นอกจากนี้ฉันไม่มีsocatสิทธิ์ผู้ดูแลระบบบนกล่องไคลเอนต์ Windows
— allquixotic

คำตอบ:


5

ฉันคิดออก : Dตอบสนองการแก้ปัญหานี้ทั้งหมดของความต้องการของฉันและตรงทั้งหมดในเป้าหมายของฉันอย่างสมบูรณ์แบบ ประสิทธิภาพไม่เลวร้ายนักเมื่อเทียบกับระดับของการอ้อมที่จำเป็นต่อการบรรลุเป้าหมาย

วิธีการทั่วไปจึง:

  1. ตั้งค่า Local Certificate Authority (CA) และสร้าง RSA "คีย์เซิร์ฟเวอร์" และ "รหัสลูกค้า" (ฉันใช้การเข้ารหัส 256 บิต) สำหรับเรื่องนี้ฉันใช้Easy-RSAเวอร์ชั่น 3.0.0-rc2

  2. เรียกใช้พร็อกซี HTTP มาตรฐาน bog ใด ๆ บน "กล่องเดเบียน" (เซิร์ฟเวอร์บนอินเทอร์เน็ตสาธารณะ) ตรวจสอบให้แน่ใจว่าได้รับฟังบนlocalhostเท่านั้น (ไม่ควรเปิดรับอินเทอร์เน็ตสาธารณะ) สำหรับวัตถุประสงค์ของฉันฉันใช้Privoxyแต่Squidจะทำงานได้ดี เนื่องจากเป็นเพียงการฟังบน localhost ไม่จำเป็นต้องมีการตรวจสอบสิทธิ์ (เว้นแต่จะมีกระบวนการที่ทำงานในกล่องของคุณที่คุณไม่เชื่อถือ; ในกรณีนี้yikes ... )

  3. ดาวน์โหลดstunnelและติดตั้งลงบนไคลเอนต์และเซิร์ฟเวอร์ กระบวนการในการทำเช่นนี้จะเป็นระบบปฏิบัติการเฉพาะ ในกรณีของฉันฉันเลือกรวบรวม stunnel จากแหล่งที่มา (หวาดระแวง ... ) สำหรับ Windows ซึ่งเป็นกระบวนการที่เกี่ยวข้องค่อนข้างฉันจะไม่ให้รายละเอียดที่นี่ ทางฝั่งเซิร์ฟเวอร์มันมีอยู่ใน package manager :)

  4. การกำหนดค่าของ Stunnel ค่อนข้างน่ากลัวในตอนแรก แต่มันง่ายกว่าที่คิด! โดยพื้นฐานแล้วบนเซิร์ฟเวอร์คุณต้องมี "stunnel.conf ของเซิร์ฟเวอร์" ด้านล่าง บนไคลเอนต์คุณต้องมี "stunnel.conf" ของลูกค้าด้านล่าง

  5. เริ่ม Privoxy เริ่ม stunnel บนเซิร์ฟเวอร์ชี้ไปที่ไฟล์ปรับแต่ง เริ่ม stunnel บนไคลเอ็นต์ชี้ไปที่ไฟล์ปรับแต่ง ไม่มีอะไรพิเศษจริง ๆ เกี่ยวกับการกำหนดค่าของ Privoxy ค่าเริ่มต้นนั้นใช้ได้สำหรับฉัน

  6. ใน Firefox เบราว์เซอร์ที่คุณเลือกทางฝั่งไคลเอ็นต์ตั้งค่าพร็อกซี HTTP และ HTTPS ให้เหมือนกับพอร์ตของ stunnel ที่ไคลเอ็นต์ของคุณกำลังรับฟังอยู่ - อาจคล้ายกับ localhost: 8080

ฉันควรทราบว่าถ้าพร็อกซีของเครือข่ายท้องถิ่นของคุณต้องการการรับรองความถูกต้องบางอย่างคุณจะต้องรับ stunnel เพื่อรับรองความถูกต้องสำหรับคุณหรือใช้พร็อกซีสกัดกั้นในพื้นที่อื่นแล้วเชื่อมโยงเข้าด้วยกัน การรับรองความถูกต้องของพร็อกซี่ -> LAN พร็อกซี / เกตเวย์ -> อินเทอร์เน็ต -> stunnel ของเซิร์ฟเวอร์ของคุณ -> privoxy

นั่นเป็นการคัดลอกจำนวนมาก แต่ใช้งานได้!

;This is the *client's* stunnel.conf.
[https]
accept = localhost:9020
connect = your.lan.proxy:80
client = yes
protocol = connect
;protocolHost should be the same as the "accept" for the server
protocolHost = 1.2.3.4:443
;Same CAfile, different cert and key pair
CAfile = ca.crt
cert = client.crt
key = client.key
;VERY IMPORTANT!!! Make sure it's really your server and not a MITM attempt by your local network by making sure that the certificate authority "ca.crt" really signed the server's cert
verify = 2
;More performance tweaks...
sessionCachetimeout = 600
sessionCacheSize = 200
TIMEOUTidle = 600

.

;This is the *server's* stunnel.conf.
[https]
;1.2.3.4 is a publicly-routable, static IP address that can be connected to by your box that's under the firewall
accept = 1.2.3.4:443
;localhost:8118 is an example of where your local forwarding HTTP(S) proxy might reside.
connect = localhost:8118
CAfile = ca.crt
cert = server.crt
key = server.key
;VERY IMPORTANT!!! Without this, anyone in the world can use your public stunnel port as an open proxy!
verify = 2
;Set some timeouts higher for performance reasons
sessionCacheTimeout = 600
sessionCacheSize = 200
TIMEOUTidle = 600

เมื่อกำหนดค่าทุกอย่างแล้วผลลัพธ์สุดท้ายก็จะกลายเป็นดังนี้:

  1. เว็บเบราว์เซอร์ของคุณเชื่อมต่อกับlocalhost:9020(stunnel) และถือว่าเป็นพร็อกซีที่สามารถยอมรับการเชื่อมต่อ HTTP และ / หรือ HTTPS
  2. เมื่อ stunnel ได้รับการเชื่อมต่อจากเบราว์เซอร์ของคุณจะเข้าถึงผ่านพร็อกซี / เกตเวย์ของไฟร์วอลล์เพื่อสร้างเซสชัน TLS กับเซิร์ฟเวอร์ระยะไกลของคุณ ณ จุดนี้ลูกค้าของคุณจะตรวจสอบใบรับรอง PKI ของเซิร์ฟเวอร์ของคุณและในทางกลับกัน
  3. เมื่อสร้างเซสชัน TLS กับเซิร์ฟเวอร์ระยะไกลของคุณแล้ว stunnel จะส่งผ่านข้อมูลที่มาจากเบราว์เซอร์ของคุณเช่นคำขอ HTTP หรือคำขอช่องสัญญาณ SSL ผ่านพร็อกซีในพื้นที่และไปยังเซิร์ฟเวอร์ของคุณโดยตรง ช่องนี้ถูกเข้ารหัสดังนั้นเครือข่ายท้องถิ่นของคุณไม่สามารถบอกได้ว่าข้อมูลมีอะไรพวกเขาสามารถเดาได้โดยทำการวิเคราะห์การจราจร
  4. เมื่อstunnelอินสแตนซ์ที่ทำงานบนเซิร์ฟเวอร์ของคุณเริ่มรับข้อมูลจะเปิดการเชื่อมต่อไปยังเช่นlocalhost:8118ที่ซึ่งพร็อกซีเซิร์ฟเวอร์ HTTP (S) ของคุณในกรณีของฉัน Privoxy กำลังรับฟังอยู่
  5. จากนั้น Privoxy จะทำหน้าที่เหมือน HTTP พร็อกซีเซิร์ฟเวอร์การส่งต่อปกติและส่งต่อคำขอของคุณไปยังอินเทอร์เน็ตสาธารณะผ่าน ISP ของเซิร์ฟเวอร์

จำนวนซ็อกเก็ตและบัฟเฟอร์ที่เกี่ยวข้องทำให้วิธีนี้เป็นค่าใช้จ่ายที่สูงมากโดยเฉพาะอย่างยิ่งถ้าคุณซ้อนการเชื่อมต่อ SSL ผ่านพร็อกซีแต่มีข้อได้เปรียบที่เครือข่ายท้องถิ่นของคุณไม่มีทางรู้ว่าไซต์ใดที่คุณเข้าชมผ่าน SSL ฉันหมายความว่ามันรู้ว่าคุณกำลังเยี่ยมชมเซิร์ฟเวอร์ของคุณ แต่นอกเหนือจากนั้นมันไม่ทราบว่าคุณกำลังเยี่ยมชม Gmail หรือ SuperUser หรืออะไรก็ตาม และเกตเวย์ท้องถิ่นของคุณไม่มีวิธีการกรองหรือบล็อกคุณ


2

ฉันได้ลองตั้งค่านี้ในเครื่องท้องถิ่นของฉันและฉันสามารถมั่นใจได้ว่า "พร็อกซี จำกัด " จะได้รับCONNECT DEBIAN_IP:443 HTTP/1.1แต่จะไม่เห็นใบรับรองใด ๆ ดังนั้นฉันไม่แน่ใจว่าสิ่งนี้จะทำงานได้หรือไม่

สมมติว่า: Debian ของคุณมีApacheหรือSquidจะทำ proxying และเซิร์ฟเวอร์ SSH บนพีซีไคลเอนต์ของคุณคุณต้องการputtyซึ่งเป็นโปรแกรมที่ไม่ต้องการสิทธิ์ผู้ดูแลระบบในการรันไม่จำเป็นต้องติดตั้งและสามารถเรียกใช้จาก pendrive ได้

อันดับแรก Debian ของคุณ:

ทำให้ SSH ของคุณฟังพอร์ต443เพียงเพิ่ม (หรือเปลี่ยนพอร์ตปัจจุบันของคุณบริการ) Port 443บน/etc/ssh/sshd_configและยังช่วยให้การส่งต่อ TCP (เพิ่มAllowTcpForwarding yesในไฟล์นั้น)

กำหนดค่า Squid หรือ Apache ของคุณเพื่อทำพร็อกซี่ เนื่องจากสิ่งนี้จะถูกใช้ผ่านอุโมงค์ SSH เท่านั้นจึงจะต้องฟังบนอินเตอร์เฟสลูปแบ็ค ในกรณีที่คุณใช้ Apache:

Listen 127.0.0.1:8080
ProxyRequests On
<Proxy *>
  Order deny,allow
</Proxy>

เซิร์ฟเวอร์เสร็จแล้วมากำหนดค่าพีซีไคลเอนต์ของคุณ:

บน putty กำหนดค่า IP สาธารณะ Debian ของคุณเป็นHostและ443เป็นพอร์ต ตรวจสอบให้แน่ใจว่าSSHยังคงเลือกอยู่ เปลี่ยนการConnection -> Proxyตั้งค่าเลือกHTTPและเติมการตั้งค่า "จำกัด พร็อกซี" ของคุณ เปลี่ยนแปลงConnectionการตั้งค่าและสถาปนา keepalive ของ-30 เปลี่ยนเป็น60 Connection -> SSH -> Tunnelsในวันsource portสถาปนา8080และ,Destination localhost:8080ออกจากที่เลือกและกดLocal Addคุณ shoud L8080 locahost:8080เห็นในพื้นที่ดังกล่าวข้างต้นบางสิ่งบางอย่างเช่น เปลี่ยนกลับไปเป็นการSessionตั้งค่าจดชื่อในแถวแรกSaved sessionsและบันทึกการตั้งค่าที่น่าเบื่อเหล่านี้ทั้งหมดเพื่อช่วยจัดระเบียบการเชื่อมต่อใหม่ในวันต่อไปนี้

ตอนนี้คุณสามารถลองOpenเชื่อมต่อกับ Debian ของคุณได้แล้ว หากคุณเห็นข้อความแจ้งผู้ใช้เราก็แค่ทำขั้นตอนนี้ให้เสร็จ ถ้าไม่ ... เราจะต้องค้นหาวิธีอื่น

ใน Firefox ตั้งlocalhostที่พอร์ต8080เป็นพร็อกซีของคุณ


น่าเสียดายที่สิ่งนี้ใช้ไม่ได้เนื่องจากโปรโตคอลของ SSH ไม่ได้ใช้ SSL / TLS เมื่อพร็อกซีที่ จำกัด ในฝั่งไคลเอ็นต์ของฉันทำการดมกลิ่นของการเชื่อมต่อผ่านพอร์ต 443 มันจะรู้ทันทีว่าไม่ใช่ซ็อกเก็ต TLS และลดลง ได้รับฉันสามารถห่อเป็น TLS ได้ แต่นั่นไม่ใช่คำตอบของคุณ
— allquixotic

ฉันทำการทดสอบด้วย HTTP พร็อกซี (BURP) และทำงานได้ดังนั้นจึงคุ้มค่ากับการลอง การห่อ SSH ผ่าน TLS และทำให้มันใช้งานได้อาจจะเป็นเรื่องยุ่งยาก แต่ ...
— NuTTyX

SSH over TLS ไม่จำเป็นต้องใช้การอ้อม หากคุณมีซ็อกเก็ต TLS อยู่แล้วคุณไม่จำเป็นต้องใช้ SSH จริงๆ ดูคำตอบของฉันด้านล่าง (หมายเหตุ: ฉันไม่รู้เกี่ยวกับคำตอบนี้จนกระทั่งเมื่อไม่นานมานี้ดังนั้นจึงไม่เหมือนกับที่ฉันตอบคำถามของคุณแล้วโพสต์คำตอบฉันค้นพบคำตอบนี้เมื่อ 25 นาทีที่แล้ว)
— allquixotic

ดีใจที่คุณแก้ไขมัน
— NuTTyX

1

คุณครึ่งทางด้วยการตั้งค่าพร็อกซีบนเซิร์ฟเวอร์ของคุณ อีกครึ่งหนึ่งเป็น SSL บนเซิร์ฟเวอร์และพร็อกซีท้องถิ่นของไคลเอ็นต์ที่ใช้ผงสำหรับเชื่อมต่อกับพร็อกซี HTTP ที่เปิดใช้งาน SSL ของคุณและตั้งค่า Firefox เป็นพร็อกซีทุกอย่างเป็น 127.0.0.1

ฉันเพิ่งทำ google อย่างรวดเร็วสำหรับการตั้งค่าโป๊วและพบสิ่งนี้: https://mariobrandt.de/archives/technik/ssh-tunnel-bypassing-transparent-proxy-using-apache-170/


เพื่อความเป็นธรรมเขาเข้าไปดูรายละเอียดเพิ่มเติมพร้อมโพสต์ของเขา ขอบคุณสำหรับการโหวต
— joe

@ krowe ไม่มีคำตอบของฉันในคำว่า "Apache" หรือ "PuTTY"
— allquixotic

ไม่ไม่รบกวนฉันเลยที่คุณตอบคำถามนี้ได้! ฉันแค่ตีความความคิดเห็นของคุณโดยบอกว่าฉันได้คำตอบของเขาหรือคัดลอกมันออกมาเมื่อความจริงแล้วฉันไม่ได้รับประโยชน์มากจากคำตอบนี้เมื่อฉันกำลังมองหาวิธีแก้ปัญหา ในการหวนกลับบล็อกที่เชื่อมโยงกับดูเหมือนจะเป็นทางเลือกที่ถูกกว่ากับคำตอบที่ฉันโพสต์ แต่ฉันไม่แน่ใจว่ามันจะแตกต่างกันในประสิทธิภาพการทำงานคุณสมบัติ ฯลฯ (อาจจะดีกว่าหรือแย่ลง)
— allquixotic

+1 ฉันชอบอันนี้เพราะฉันใช้เว็บเซิร์ฟเวอร์อยู่ดี
— krowe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.