3 คะแนน โดย GN⁺ 2023-09-07 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • วิธีโฮสต์ที่ทำให้ที่อยู่นั้นกลายเป็นเว็บไซต์ที่สมบูรณ์ในตัวเอง โดย บีบอัดไฟล์ทั้งหมดของเว็บไซต์เป็น ZIP แล้วเข้ารหัสเป็น Base64 จากนั้นนำไปต่อท้ายโดเมน
  • โครงสร้างที่สามารถส่งต่อเว็บไซต์ได้ด้วย การแชร์ที่อยู่เท่านั้น โดยไม่ต้องอัปโหลดไฟล์แยกหรือจัดเก็บบนเซิร์ฟเวอร์
  • จัดการการบีบอัด ZIP, การเข้ารหัส Base64 และการสร้าง URL ได้ด้วยคำสั่ง command line เพียงบรรทัดเดียว และยังรองรับวิธี ลากไฟล์ ZIP หากไม่มี command line
  • เซิร์ฟเวอร์จะ เก็บคอนเทนต์ไว้ใน RAM เพียง 15 นาที แล้วทิ้งไป หลังจากนั้นจะประมวลผลใหม่เฉพาะเมื่อเปิดลิงก์เดิมอีกครั้ง
  • เป็น โอเพนซอร์ส ในฐานะส่วนหนึ่งของโปรเจกต์เว็บเซิร์ฟเวอร์ Lwan และสามารถพิมพ์ลงกระดาษผ่าน QR code แล้วสแกนได้ด้วย

แนวคิดของ smolsite

  • เว็บไซต์ทั้งเว็บถูก รวมอยู่ใน URL เมื่อแชร์ที่อยู่ก็เท่ากับส่งต่อเว็บไซต์ไปพร้อมกัน
  • เช่นตัวอย่างที่ประกอบด้วยไฟล์สองไฟล์ (index.html, mylogo.png) สามารถรวมหลายไฟล์แล้วแปลงเป็นที่อยู่เดียวได้

วิธีสร้าง smolsite

  • บีบอัดไฟล์ทั้งหมดเป็น ไฟล์ ZIP แล้ว เข้ารหัสเป็น Base64 จากนั้นนำไปต่อท้าย https://smolsite.zip/
    • ตัวอย่างคำสั่ง:

FAQ

  • กรณีไม่มี command line

    • สามารถแชร์ได้โดย ลากไฟล์ ZIP ไปวางบนแถบสีม่วงด้านล่าง
  • สามารถโฮสต์บนกระดาษได้หรือไม่

    • ทำได้ โดย คลิก QR code เพื่อดูเวอร์ชันที่พิมพ์และสแกนได้
  • เป็นโอเพนซอร์สหรือไม่

  • วิธีประมวลผล ZIP บนเซิร์ฟเวอร์

    • คอนเทนต์จะถูกประมวลผลบนเซิร์ฟเวอร์และ เก็บไว้ใน RAM เป็นเวลา 15 นาที จากนั้นจะถูกลบ
    • อย่างไรก็ตาม หากมีคนเปิดลิงก์เดียวกันอีกครั้ง ก็จะถูกประมวลผลใหม่
  • การรับมือ ZIP bomb

    • ข้อมูลที่ถูก deflate จะถูก ส่งต่อไปยังเบราว์เซอร์ตามเดิมโดยไม่แก้ไข และไม่มีการแตกไฟล์แบบ recursive จึงป้องกันได้ในระดับหนึ่ง
  • สามารถดาวน์โหลดหรือลบคอนเทนต์ได้หรือไม่

    • จะพยายามอย่างเต็มที่ในการ บล็อกการแชร์ URL ที่แน่นอนผ่าน smolsite แต่เนื่องจากคอนเทนต์อยู่ภายใน URL จึงไม่สามารถลบได้อย่างสมบูรณ์
      • ผู้ที่มีลิงก์สามารถดึงเนื้อหาออกมาได้แม้ไม่ใช้ smolsite

1 ความคิดเห็น

 
GN⁺ 2023-09-07
ความคิดเห็นบน Hacker News
  • เจ๋ง
    https://smolsite.zip/UEsDBBQAAgAIAFtLJ1daaE7RlwIAAN4EAAAKAAA...
    • เจ๋ง งั้นก็ทำให้ TinyURL โฮสต์เว็บไซต์ได้เหมือนกัน
      https://tinyurl.com/dmk9e4m2
    • ลองทำ QR code จากลิงก์นี้ดูแล้ว ก็ไม่ได้มีอะไรมากเลย เจ๋งดีที่โฮสต์เว็บไซต์ไว้ใน QR code ได้
  • เผื่อใครยังไม่รู้ สามารถทำแบบเดียวกันด้วย data URI ได้เช่นกัน
    data:text/html,My%20small%20website
    Look,%20it's%20real!
    ถ้าต้องการ ก็ใช้ตัวสร้าง data URI เพื่อเข้ารหัสเป็น base64 ได้ ข้อดีของ smolsite คือถ้าเป็น zip จะใส่ข้อมูลได้มากกว่า data URI เล็กน้อย และ JavaScript API บางตัวทำงานบน URL ของ smolsite แต่ไม่ทำงานบน data URI
    • ใช้เทคนิคนี้ทำ แผ่นจดบันทึก แบบง่าย ๆ ได้
      data:text/html,
      เอาไว้บนแถบ bookmarks แล้วใช้
    • ขอเขียนไว้ก่อน ก่อนจะมีใครทำ smolsite สักอันให้ติดตั้ง service worker บนโดเมนนั้น แล้วส่งข้อมูล analytics ของ smolsite อื่น ๆ ทั้งหมดไปยังเซิร์ฟเวอร์ของตัวเอง
    • ใช้ Base64 + gzip เก็บข้อความได้ราว 5KB ในทวีตเดียว: https://sonnet.io/projects#:~:text=Laconic!%20(a%20Twitter%2...
    • ไม่ว่าจะดีหรือร้าย เว็บเบราว์เซอร์และตัวย่อ URL จะบล็อกการเปิดและการ redirect ของ data URL ดังนั้นจึงมีประโยชน์หลัก ๆ แค่ใช้เป็น bookmark ในเบราว์เซอร์
      [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_...
  • ถ้าพูดถึงการใส่อะไรแปลก ๆ ลงใน URL ก็มี สุนัขที่แสดงเป็นจำนวนเฉพาะ ด้วย: https://geonnave.github.io/primg/#17976931348623159077293051...
    • อันนี้น่าทึ่ง แค่คิดจะนำเสนอภาพด้วย การแทนค่าแบบไบนารีของจำนวนเฉพาะ ก็สุดยอดแล้ว
  • คำตอบของผมก็อยู่ใน URL เหมือนกัน
    https://wgx.github.io/anypage/?eyJoMSI6IkhlbGxvIEhOISIsImgyI...
  • ดีเลย นึกถึง nopaste ซึ่งเป็น pastebin ที่บีบอัดข้อความใน URL ด้วย LZMA แล้วเข้ารหัสเป็น base64 เพื่อเก็บไว้
    [0] https://nopaste.boris.sh/
  • วิธีนี้ส่งเนื้อหาไปยังเซิร์ฟเวอร์เพื่อคลายการบีบอัด ถ้าทำให้ซับซ้อนขึ้นอีกหน่อย อาจใส่ zip ไว้ใน ส่วน anchor แล้วให้ response ส่งโค้ดฝั่งไคลเอนต์สำหรับแตกไฟล์จากตรงนั้นได้

อย่างไรก็ตาม เนื่องจากส่วน anchor จะไม่ถูกส่งไปยังเซิร์ฟเวอร์ ต่อให้เซิร์ฟเวอร์ต้องการ ก็จะไม่สามารถตรวจสอบเนื้อหาอันตรายที่ถูกส่งผ่านช่องทางนี้ได้

  • คิดแบบเดียวกันเลย ถ้าเซิร์ฟเวอร์คอนเทนต์แบบ static ใช้ routing glob ที่ส่งทราฟฟิกทั้งหมดไปยังเว็บเพจเดียวกัน ก็ทำได้แม้ไม่มี anchor วิธีนี้ทำให้การ โฮสต์ ง่ายขึ้นจริง ๆ
  • ของแบบนี้เจ๋งจริง ๆ และคิดว่า Show HN ควรให้ความรู้สึกแบบนี้ตั้งแต่แรก มากกว่าจะเป็น เครื่องมือการตลาด ให้บางองค์กรดันผลิตภัณฑ์
    • แบบนี้ก็ดี แต่ก็ควรคำนึงด้วยว่า Y Combinator เป็น startup incubator การที่ผู้คนเอาผลิตภัณฑ์ของตัวเองมาโชว์ ก็น่าจะเป็นสิ่งที่ควรส่งเสริมในระดับหนึ่ง
    • ผมไม่มองว่าเป็นโฆษณา หลายคนมา Hacker News เพื่อดูว่าเหล่าแฮกเกอร์กำลังสร้างอะไรอยู่ และผมก็มาเพราะแบบนั้น
      โพสต์ Show HN ที่เคยเห็นมาทั้งหมดน่าสนใจ และทำให้ผมมีแรงจูงใจที่จะเริ่มโปรเจกต์ของตัวเองแล้วขัดเกลาให้เอามาโชว์ที่นี่ได้ เวลาใครสักคนส่งงานของผมขึ้นมาให้ แล้วผมได้คุยเรื่องนั้นที่นั่น มันรู้สึกดีมากจริง ๆ
    • รู้สึกไหมว่า Show HN ที่แปลกใหม่กว่าถูกโพสต์เชิงบริษัทกลบไป?
    • เพราะงั้น Show HN ที่น่าสนใจก็เลยได้อัปโหวต
  • เมื่อก่อนเคยคิดไอเดียว่าจะทำ หอสมุดบาเบล ของ Borges แบบนี้ เอาข้อความทั้งหมดใส่ไว้ใน URL แล้วใช้การเข้ารหัสที่ซับซ้อนขึ้นเพื่อปรับให้เหมาะกับคำภาษาอังกฤษ จากนั้นเพิ่มระบบค้นหาที่ใช้ค้นหาชื่อตัวเองหรือชิ้นส่วนข้อความได้
    แน่นอนว่าสุดท้ายก็คงติดข้อจำกัดความยาว URL แต่ก็อาจเพิ่มเลเยอร์ที่ให้ curator ประกอบชุด URL เพื่อสร้างข้อความที่ใหญ่ขึ้นได้ อาจใส่เวทมนตร์ LLM เข้าไปนิดหน่อยให้สร้างชุดเหล่านั้นได้ด้วย แบบนั้นมันก็จะกลายเป็นห้องสมุดที่มีไม่ใช่แค่หนังสือทุกเล่มที่เคยเขียนแล้ว แต่รวมถึงหนังสือทุกเล่มที่สามารถถูกเขียนได้ด้วย
    แน่นอนว่าพูดเล่น ผมรู้ว่ามันก็คล้ายกับการบอกว่าใน Notepad ก็มีหนังสือทุกเล่มที่มีอยู่แล้วเหมือนกัน แค่ต้องพิมพ์เข้าไปเองเท่านั้น
    • นี่ทำให้นึกถึง https://libraryofbabel.info/ มากทีเดียว
    • ผมก็เคยมีไอเดียคล้าย ๆ กัน อยากรองรับ ประเภทสื่อ อื่น ๆ อย่างรูปภาพ เสียง เว็บเพจด้วย และมันเป็นการทดลองที่สนุกมากจริง ๆ
      https://mkaandorp.github.io/hdd-of-babel/
  • งานคล้าย ๆ กันที่เคยโพสต์มาก่อน
    https://news.ycombinator.com/item?id=34312546
    https://news.ycombinator.com/item?id=2464213
    • เห็นคอมเมนต์ในลิงก์แรกที่บอกว่า Yahoo ใส่อ็อบเจ็กต์ JSON ที่เข้ารหัส base64 ขนาดยักษ์ไว้ใน URL แล้วทำให้นึกถึงเรื่องแย่ ๆ ที่เคยทำในที่ทำงานเก่า
      เพื่อเลี่ยงไม่ต้องจ่ายค่าโมดูลปฏิทินอีเวนต์ราคาแพงให้เวนเดอร์เว็บไซต์ ผมโค้ดหน้าสาธารณะที่สร้างปฏิทินโดยใส่สคีมาอีเวนต์ JSON แบบง่ายที่เข้ารหัส base64 ไว้ในแอตทริบิวต์ data-events พนักงานจะใช้หน้าส่วนตัวไปดึงข้อมูลอีเวนต์เดิมจากหน้าสาธารณะมาเติมไว้ล่วงหน้าใน calendar builder แล้วแก้ไข จากนั้นดึงชิ้นโค้ดใหม่ไปแปะในหน้าสาธารณะ
      โดยพื้นฐานแล้วมันทำงานได้ดี แต่สุดท้ายเหมือนว่าเราก็จ่ายค่า calendar add-on ไปอยู่ดี
    • ตอนนี้หา HN link ไม่เจอ แต่นี่คือโปรเจกต์ Twitter CDN ที่เคยโพสต์เมื่อหลายปีก่อน ใช้วิธี base64+gzip data URI
      https://sonnet.io/projects#:~:text=Laconic!%20(a%20Twitter%2...
  • ขำดี แต่ก็อาจมีการใช้งานที่ปฏิบัติได้จริงอยู่บ้าง ถึงอย่างนั้น แฮกเกอร์ ก็ควรระวัง
    • นึกออกทันทีว่านี่เป็นวิธีชั้นดีในการส่ง เพย์โหลดประสงค์ร้าย ให้คู่กรณีที่ไม่คาดคิด WAF ที่ดีน่าจะมองว่าน่าสงสัยแล้วบล็อก แต่ดูเหมือนว่าอาจหลบเลี่ยงได้ด้วยทริกบางอย่าง