Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

รักษาความปลอดภัยเว็บไซต์: Edge IP Whitelisting & Blocking ด้วย Cloudflare Workers และ Upstash Redis

การจำกัดการเข้าถึงเว็บไซต์ให้ IP เฉพาะเป็นความต้องการทั่วไป ในโพสต์นี้ จะแสดงวิธี Implement IP Allow/Deny List ด้วย Edge Computing มาแนะนำ Cloudflare Workers ก่อน

Cloudflare Workers

Cloudflare Workers เป็นเทคโนโลยียอดนิยมในหลายปีผ่านมา เปิดให้ใช้งานสาธารณะในปี 2017 และ Cloudflare KV Storage เปิดในปี 2019

โดยไม่ลุ้นลึกรายละเอียด ผมจะอธิบายสรุป: ด้วย Cloudflare Workers คุณสามารถ Intercept HTTP Request ระดับ Edge รันโค้ดสนิปเพท และจัดการ Request/Response คุณยังใช้ KV Storage เพื่อ Put/Get Dictionary ที่พร้อมใช้งานใน Cloudflare Workers ได้ ลอง Playground Environment ได้เลย มันเรียบง่ายและทดสอบได้ 1 คลิก

นอกจาก Cloudflare KV Storage นักพัฒนาอาจต้องการโครงสร้างข้อมูลขั้นสูงกว่า และอาจต้องการเข้าถึง KV Storage จากภายนอก (เช่นจากแบ็กเอนด์หรือ API/SDK Clients) ดังนั้นเราจึงเปิดใช้งาน REST API Upstash ใหม่ๆ

ตอนนี้คุณสามารถเข้าถึง Upstash Redis Database ได้โดยใช้:

  • Upstash REST API ใน Cloudflare Workers
  • redis-cli ใน Command Line Terminal
  • Redis Client ใดๆ ในภาษาโปรแกรมที่ต้องการ

โปรดคลิกปุ่ม connect ในหน้ารายละเอียดฐานข้อมูลสำหรับโค้ดตัวอย่างและคำสั่งตัวอย่าง

รักษาความปลอดภัยเว็บไซต์: Edge IP Whitelisting & Blocking ด้วย Cloudflare Workers และ Upstash Redis

มาสร้างแอปเล็กๆ ด้วย Cloudflare Workers และสำรวจ Upstash Redis REST API กัน

แอปพลิเคชัน

IP Allow/Deny ใน Cloudflare Worker ใช้ Redis เป็นแหล่งข้อมูลจริง (Source of Truth)

ข้อกำหนดเบื้องต้น

:::note เลือก Global Database ขณะสร้าง Upstash Database Global Database จำลองข้อมูลไปหลายภูมิภาคเพื่อลด Latency จาก Edge Functions :::

มาสร้าง Cloudflare Worker และ Intercept Request เมื่อสร้าง Worker จะมีโค้ดตัวอย่างมาอัตโนมัติ

การ Implement

มาดึง IP Address ของผู้เยี่ยมชม:

async function handleRequest(request) {
  const ip = request.headers.get("cf-connecting-ip");
  return new Response(ip);
}

สามารถดึง IP ผู้เยี่ยมชมจาก Header ได้ ตอนนี้เราต้องการตรวจสอบว่า IP นี้อยู่ใน Allowed List หรือไม่ มาทำ REST API Call เดียวและปรับปรุงโค้ด:

async function handleRequest(request) {
  const ip = request.headers.get("cf-connecting-ip");
  res = await fetch(
    "https://YOUR_DATABASE_ENDPOINT/sismember/allowed-set/" + ip + "?_token=YOUR_REST_API_TOKEN"
  );
  if ((await res.text()).includes("1")) {
    return new Response(ip + " is allowed.");
  }
  return new Response(ip + " is not allowed.");
}

ตอนนี้เราทำ REST API Call ไป Upstash Redis Server และตรวจสอบว่า IP อยู่ใน List หรือไม่ หากผลลัพธ์มี "1" หมายถึงอยู่ใน List มิฉะนั้นไม่ได้อยู่

คุณสามารถอัปเดต Redis Set ได้ด้วย redis-cli คำสั่ง:

sadd allowed-set $IP_ADDRESS

สรุปและงานอนาคต

ตอนนี้สามารถเข้าถึง Redis Server Instance ผ่าน REST API ได้ เรารองรับเกือบทุกคำสั่งผ่าน REST API โปรดดู เอกสารประกอบ สำหรับรายละเอียดเพิ่มเติม ด้วย Cloudflare KV Storage คุณถูกผูกมัดกับ KV Dictionary API เท่านั้น และยากที่จะเข้าถึง Cloudflare Workers KV จากแอปพลิเคชันบุคคลที่สาม แต่ Redis มี Client SDKs จำนวนมากและ redis-cli ใน Upstash คุณสามารถเข้าถึง Redis Database ผ่าน REST API ได้

แอปพลิเคชันง่ายๆ นี้สามารถขยายเป็น Security Guard ประเภทหนึ่งใน Cloudflare Workers ได้ ผู้ใช้สามารถเปลี่ยนค่า Config ใน Redis Database และ Cloudflare Worker อ่าน Configuration จาก Redis