การทดสอบอัตโนมัติ
บริการแบบโฮสต์ (หมวดหมู่ที่มี type: service) จะได้รับการทดสอบโดยอัตโนมัติเมื่อไฟล์ผลการประเมินมี domain ผู้ให้บริการอีเมลและบริการส่งต่ออีเมลที่มี mail_domain จะได้รับการทดสอบอีเมลด้วย
| การทดสอบ | สิ่งที่ตรวจสอบ | เกณฑ์ | ใช่ | บางส่วน | ไม่ |
|---|---|---|---|---|---|
| Qualys SSL Labs | เวอร์ชัน TLS, cipher, ใบรับรอง และช่องโหว่ TLS ที่รู้จัก | tls |
A+ หรือ A | A- หรือ B | C หรือต่ำกว่า |
| Mozilla HTTP Observatory | เฮดเดอร์ความปลอดภัย เช่น CSP, HSTS และ X-Frame-Options รวมถึงแฟล็กของคุกกี้ | security_headers |
A+ หรือ A | A-, B+ หรือ B | B- หรือต่ำกว่า |
| การทดสอบเว็บไซต์ของ Internet.nl | IPv6, DNSSEC, HTTPS และตัวเลือกความปลอดภัย | web_standards |
90% ขึ้นไป | 70% ถึง 89% | ต่ำกว่า 70% |
| การทดสอบอีเมลของ Internet.nl | IPv6, DNSSEC, DMARC, DKIM, SPF, STARTTLS และ DANE สำหรับโดเมนอีเมล | mail_standards |
90% ขึ้นไป | 70% ถึง 89% | ต่ำกว่า 70% |
| Hardenize | การกำหนดค่าความปลอดภัยของ DNS อีเมล และเว็บ | ลิงก์ไว้เท่านั้น |
มาตรฐานอีเมล
ผู้ให้บริการอีเมลและบริการส่งต่ออีเมลที่มี mail_domain จะได้รับการทดสอบเหล่านี้ด้วย ซึ่งรันโดย scripts/mail-tests.js:
| การทดสอบ | สิ่งที่ตรวจสอบ | เกณฑ์ | ใช่ |
|---|---|---|---|
| DNS over HTTPS | SPF, นโยบาย DMARC, โหมด MTA-STS (RFC 8461), TLS-RPT (RFC 8460), การตรวจสอบ DNSSEC, DANE TLSA บนทุกโฮสต์ MX (RFC 7672) และระเบียน BIMI กับ SRV ตาม RFC 6186 เพื่อเป็นข้อมูล | transport_security |
บังคับใช้ครบทั้งหก |
IMAP CAPABILITY |
Implicit TLS บนพอร์ต 993 (RFC 8314), IMAP4rev1 หรือ IMAP4rev2, IDLE หากไม่ได้จะลองใช้ STARTTLS บนพอร์ต 143 | imap_standards |
Implicit TLS, IMAP4rev1/rev2 และ IDLE |
POP3 CAPA |
Implicit TLS บนพอร์ต 995, CAPA (RFC 2449), UIDL หากไม่ได้จะลองใช้ STLS บนพอร์ต 110 | pop3_standards |
Implicit TLS, CAPA และ UIDL |
SMTP EHLO |
การส่งอีเมลผ่าน implicit TLS บนพอร์ต 465, SMTPUTF8, 8BITMIME, PIPELINING, AUTH หากไม่ได้จะลองใช้ STARTTLS บนพอร์ต 587 | smtp_standards |
Implicit TLS และส่วนขยายครบทั้งสี่ |
ชื่อเซิร์ฟเวอร์มาจาก imap_host, pop3_host และ smtp_host ในไฟล์ผลการประเมิน หรือจากระเบียน SRV ตาม RFC 6186 ของผู้ให้บริการ ตั้งค่าโฮสต์เป็น false เมื่อผู้ให้บริการไม่มีโปรโตคอลนั้น ความสามารถคือสิ่งที่แต่ละเซิร์ฟเวอร์ประกาศไว้ก่อนเข้าสู่ระบบ และรายการทั้งหมดแสดงอยู่ในหน้าผลการประเมินแต่ละหน้า
ตัวติดตามบนเว็บไซต์
ทุกรายการที่มีเว็บไซต์ รวมถึงแอป จะได้รับการทดสอบตัวติดตามซึ่งรันโดย scripts/trackers.js การทดสอบจะโหลดหน้าแรกโดยไม่รัน JavaScript และเปรียบเทียบโฮสต์ของทุกสคริปต์ เฟรม รูปภาพ และสไตล์ชีต รวมถึงโค้ดแบบอินไลน์ กับรายชื่อบริการติดตามและวิเคราะห์ที่รู้จัก
| สิ่งที่พบ | ผลต่อ no_trackers |
|---|---|
| ตัวติดตามจากบุคคลที่สาม เช่น Google Analytics, Google Tag Manager, Meta Pixel, Hotjar หรือ HubSpot | คำตอบกลายเป็น "ไม่" ไม่ว่าไฟล์ผลการประเมินจะระบุว่าอย่างไร |
| การวิเคราะห์แบบไม่ใช้คุกกี้ (Plausible, Fathom, Simple Analytics, Matomo Cloud, Cloudflare Web Analytics) | "ใช่" กลายเป็น "บางส่วน" |
| ฟอนต์ ส่วนฝัง การรายงานข้อผิดพลาด แชตช่วยเหลือ หรือเครื่องมือขอความยินยอม | แสดงไว้ในหน้า ไม่คิดคะแนน |
| ไม่พบสิ่งใด | ใช้คำตอบในไฟล์ผลการประเมิน |
เมื่อเว็บไซต์เป็นหน้าบนแพลตฟอร์มโฮสต์โค้ดหรือร้านค้าแอป (GitHub, GitLab, Codeberg, SourceForge, F-Droid, Google Play และที่คล้ายกัน) การทดสอบจะถูกข้าม เพราะหน้านั้นไม่ได้ดำเนินการโดยโครงการ
การทดสอบเห็นเฉพาะตัวติดตามที่เขียนไว้ในตัวหน้าเว็บเท่านั้น ตัวติดตามที่สคริปต์เพิ่มเข้ามาภายหลัง และการส่งข้อมูลการใช้งานภายในแอป ยังต้องมีหลักฐานในไฟล์ผลการประเมิน เช่น นโยบายความเป็นส่วนตัวหรือรายงานของ Exodus Privacy
SRS และ ARC ไม่สามารถมองเห็นได้จากภายนอกโดยไม่ส่งอีเมล จึงเป็นเกณฑ์ที่ตอบด้วยหลักฐานแทนการทดสอบ
การตรวจสอบอัตโนมัติที่ยังไม่ได้รันจะแสดงเป็น "ยังไม่ได้ทดสอบ" และไม่นำมาคิดคะแนน ผู้ให้บริการจึงไม่ถูกหักคะแนนจากการทดสอบที่ยังไม่เกิดขึ้น
สำหรับ SSL Labs จะใช้เกรดที่ต่ำที่สุดจากที่อยู่ IP ทั้งหมดของโดเมน
Hardenize ไม่มี API สาธารณะแล้ว แต่ละหน้าจึงลิงก์ไปยังรายงานสาธารณะแทนการให้คะแนน
กำหนดเวลา
เวิร์กโฟลว์ Scan รันทุกวันและทดสอบ 40 รายการที่มีผลลัพธ์เก่าที่สุด (Internet.nl มีขีดจำกัดของตัวเอง ดูด้านล่าง) ทุกบริการจึงได้รับการทดสอบเป็นประจำโดยไม่ทำให้ API ฟรีรับภาระมากเกินไป ผลลัพธ์ถูกบันทึกไว้ใน scans/ เป็น JSON คอมมิตลงในคลังโค้ด และเผยแพร่พร้อมกับเว็บไซต์ แต่ละหน้าแสดงเวลาที่การทดสอบรันครั้งล่าสุด
การทดสอบที่ล้มเหลวจะเก็บผลลัพธ์ก่อนหน้าไว้และบันทึกข้อผิดพลาด การขัดข้องชั่วคราวจึงไม่เปลี่ยนคะแนน
ขีดจำกัดของ Internet.nl
การใช้ batch API ของ Internet.nl เป็นไปตามข้อกำหนดการใช้งานของบริการ:
- ส่งคำขอแบบ batch ได้ไม่เกิน 2 ครั้งในช่วง 7 วันใดๆ การทดสอบเว็บไซต์และการทดสอบอีเมลเป็นคำขอแยกกัน การทดสอบครบหนึ่งรอบจึงใช้ทั้งสองครั้ง
- ไม่เกิน 5000 โดเมนต่อคำขอ เมื่อมีโดเมนที่ต้องทดสอบมากกว่านั้น โดเมนที่ไม่มีผลลัพธ์หรือมีผลลัพธ์เก่าที่สุดจะได้ไปก่อน และโดเมนที่เหลือจะรอคำขอครั้งถัดไป
- ไม่มีคำขอสำหรับโดเมนเดียว ดังนั้น
--onlyจะข้าม Internet.nl
ทุกคำขอจะถูกบันทึกไว้ใน scans/internetnl-requests.json ซึ่งจะถูกคอมมิตพร้อมกับผลลัพธ์แม้การรันจะล้มเหลว การรันที่พบว่าถึงขีดจำกัดรายสัปดาห์แล้วจะข้าม Internet.nl และเก็บผลลัพธ์ที่มีอยู่ไว้ batch ใช้เวลาหลายชั่วโมง จึงมีการตรวจสอบสถานะคำขอทุก 5 นาที และคำขอที่ยังทำงานอยู่เมื่อการรันสิ้นสุดจะถูกรับผลโดยการรันครั้งถัดไปแทนการส่งใหม่ Internet.nl ไม่สนใจ --limit และมีเพียงการรันบน branch เริ่มต้นเท่านั้นที่ใช้ข้อมูลรับรองของ Internet.nl การรันทั้งหมดจึงใช้บันทึกร่วมกันชุดเดียว
เว็บไซต์นี้นำผลการทดสอบที่ได้จากเครื่องมือทดสอบ Internet.nl มาใช้ซ้ำ
การกำหนดค่า
การตั้งค่าทั้งหมดเป็น secret ของคลังโค้ดที่ไม่บังคับ (Settings › Secrets and variables › Actions):
| Secret | วัตถุประสงค์ |
|---|---|
SSLLABS_EMAIL |
อีเมลที่ลงทะเบียนกับ SSL Labs API v4 หากไม่มีจะใช้ API v3 การลงทะเบียนต้องใช้ที่อยู่อีเมลขององค์กร |
INTERNETNL_USERNAME, INTERNETNL_PASSWORD |
บัญชีสำหรับ Internet.nl batch API หากไม่มี หน้าต่างๆ จะลิงก์ไปยังการทดสอบสาธารณะของ Internet.nl และเกณฑ์ของ Internet.nl จะยังคงเป็น "ไม่ทราบ" |
INTERNETNL_API |
URL ฐานของ batch API สำหรับ Internet.nl แบบโฮสต์เอง ค่าเริ่มต้นคือ https://batch.internet.nl/api/batch/v2 |
Mozilla HTTP Observatory ไม่ต้องใช้บัญชี ข้อมูลสัญญาอนุญาตจาก GitHub ใช้โทเค็นในตัวของเวิร์กโฟลว์
การรันการทดสอบในเครื่อง
npm ci
node scripts/scan.js --only email-providers/forward-email
node scripts/scan.js --limit 5 --tests observatory
node scripts/scan.js --tests mail-dns # email DNS checks only
npm run test:unit # protocol probes against local mock servers
npm run build
โดเมนใดที่ถูกทดสอบ
ฟิลด์ domain ควรเป็นเว็บไซต์หลักหรือเว็บแอปที่ผู้คนใช้เข้าสู่ระบบ เช่น mail.example.com แทนที่จะเป็นซับโดเมนการตลาดบนโฮสต์อื่น ผู้ให้บริการสามารถเสนอโดเมนที่ถูกต้องกว่าได้ใน pull request