Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
openclaw security audit ส่งออกผลการตรวจพบแบบมีโครงสร้างที่อ้างอิงด้วย checkId หน้า
นี้เป็นแคตตาล็อกอ้างอิงสำหรับ ID เหล่านั้น สำหรับโมเดลภัยคุกคามระดับสูง
และคำแนะนำการเพิ่มความแข็งแกร่ง โปรดดู ความปลอดภัย
ค่า checkId ที่มีสัญญาณชัดเจนและคุณมีแนวโน้มจะพบมากที่สุดในการใช้งานจริง (ไม่
ครอบคลุมทั้งหมด):
checkId | ระดับความรุนแรง | เหตุใดจึงสำคัญ | คีย์/พาธหลักสำหรับการแก้ไข | แก้ไขอัตโนมัติ |
|---|---|---|---|---|
fs.state_dir.perms_world_writable | วิกฤต | ผู้ใช้/โปรเซสอื่นสามารถแก้ไขสถานะ OpenClaw ทั้งหมดได้ | สิทธิ์ filesystem บน ~/.openclaw | ใช่ |
fs.state_dir.perms_group_writable | เตือน | ผู้ใช้ในกลุ่มสามารถแก้ไขสถานะ OpenClaw ทั้งหมดได้ | สิทธิ์ filesystem บน ~/.openclaw | ใช่ |
fs.state_dir.perms_readable | เตือน | ไดเรกทอรีสถานะอ่านได้โดยผู้อื่น | สิทธิ์ filesystem บน ~/.openclaw | ใช่ |
fs.state_dir.symlink | เตือน | เป้าหมายของไดเรกทอรีสถานะกลายเป็นอีกขอบเขตความเชื่อถือ | โครงร่าง filesystem ของไดเรกทอรีสถานะ | ไม่ |
fs.config.perms_writable | วิกฤต | ผู้อื่นสามารถเปลี่ยนนโยบาย/การกำหนดค่า auth/tool ได้ | สิทธิ์ filesystem บน ~/.openclaw/openclaw.json | ใช่ |
fs.config.symlink | เตือน | ไม่รองรับการเขียนไฟล์กำหนดค่าที่เป็น symlink และเพิ่มอีกขอบเขตความเชื่อถือ | แทนที่ด้วยไฟล์กำหนดค่าปกติ หรือชี้ OPENCLAW_CONFIG_PATH ไปยังไฟล์จริง | ไม่ |
fs.config.perms_group_readable | เตือน | ผู้ใช้ในกลุ่มสามารถอ่านโทเค็น/การตั้งค่าใน config ได้ | สิทธิ์ filesystem บนไฟล์ config | ใช่ |
fs.config.perms_world_readable | วิกฤต | Config อาจเปิดเผยโทเค็น/การตั้งค่าได้ | สิทธิ์ filesystem บนไฟล์ config | ใช่ |
fs.config_include.perms_writable | วิกฤต | ผู้อื่นสามารถแก้ไขไฟล์ config include ได้ | สิทธิ์ include-file ที่อ้างอิงจาก openclaw.json | ใช่ |
fs.config_include.perms_group_readable | เตือน | ผู้ใช้ในกลุ่มสามารถอ่านความลับ/การตั้งค่าที่ include ได้ | สิทธิ์ include-file ที่อ้างอิงจาก openclaw.json | ใช่ |
fs.config_include.perms_world_readable | วิกฤต | ความลับ/การตั้งค่าที่ include อ่านได้โดยทุกคน | สิทธิ์ include-file ที่อ้างอิงจาก openclaw.json | ใช่ |
fs.auth_profiles.perms_writable | วิกฤต | ผู้อื่นสามารถแทรกหรือแทนที่ข้อมูลประจำตัวของโมเดลที่จัดเก็บไว้ได้ | สิทธิ์ agents/<agentId>/agent/auth-profiles.json | ใช่ |
fs.auth_profiles.perms_readable | เตือน | ผู้อื่นสามารถอ่านคีย์ API และโทเค็น OAuth ได้ | สิทธิ์ agents/<agentId>/agent/auth-profiles.json | ใช่ |
fs.credentials_dir.perms_writable | วิกฤต | ผู้อื่นสามารถแก้ไขสถานะการจับคู่/ข้อมูลประจำตัวของ channel ได้ | สิทธิ์ filesystem บน ~/.openclaw/credentials | ใช่ |
fs.credentials_dir.perms_readable | เตือน | ผู้อื่นสามารถอ่านสถานะข้อมูลประจำตัวของ channel ได้ | สิทธิ์ filesystem บน ~/.openclaw/credentials | ใช่ |
fs.sessions_store.perms_readable | เตือน | ผู้อื่นสามารถอ่าน transcript/metadata ของเซสชันได้ | สิทธิ์ session store | ใช่ |
fs.log_file.perms_readable | เตือน | ผู้อื่นสามารถอ่าน log ที่ถูก redacted แล้วแต่ยังคงละเอียดอ่อนได้ | สิทธิ์ไฟล์ log ของ Gateway | ใช่ |
fs.synced_dir | เตือน | State/config ใน iCloud/Dropbox/Drive ขยายการเปิดเผยโทเค็น/transcript | ย้าย config/state ออกจากโฟลเดอร์ที่ซิงก์ | ไม่ |
gateway.bind_no_auth | วิกฤต | bind ระยะไกลโดยไม่มี shared secret | gateway.bind, gateway.auth.* | ไม่ |
gateway.loopback_no_auth | วิกฤต | loopback ที่ผ่าน reverse proxy อาจกลายเป็นไม่มีการยืนยันตัวตน | gateway.auth.*, การตั้งค่า proxy | ไม่ |
gateway.trusted_proxies_missing | เตือน | มีเฮดเดอร์ reverse proxy อยู่แต่ไม่ได้ trusted | gateway.trustedProxies | ไม่ |
gateway.http.no_auth | เตือน/วิกฤต | API HTTP ของ Gateway เข้าถึงได้ด้วย auth.mode="none" | gateway.auth.mode, gateway.http.endpoints.* | ไม่ |
gateway.http.session_key_override_enabled | ข้อมูล | ผู้เรียก API HTTP สามารถ override sessionKey ได้ | gateway.http.allowSessionKeyOverride | ไม่ |
gateway.tools_invoke_http.dangerous_allow | เตือน/วิกฤต | เปิดใช้งานเครื่องมืออันตรายอีกครั้งผ่าน API HTTP | gateway.tools.allow | ไม่ |
gateway.nodes.allow_commands_dangerous | เตือน/วิกฤต | เปิดใช้งานคำสั่ง Node ที่มีผลกระทบสูง (กล้อง/หน้าจอ/รายชื่อติดต่อ/ปฏิทิน/SMS) | gateway.nodes.allowCommands | ไม่ |
gateway.nodes.deny_commands_ineffective | เตือน | รายการ deny ที่คล้าย pattern ไม่ตรงกับข้อความ shell หรือกลุ่ม | gateway.nodes.denyCommands | ไม่ |
gateway.tailscale_funnel | วิกฤต | เปิดเผยต่ออินเทอร์เน็ตสาธารณะ | gateway.tailscale.mode | ไม่ |
gateway.tailscale_serve | ข้อมูล | เปิดใช้งานการเข้าถึงผ่าน tailnet ด้วย Serve | gateway.tailscale.mode | ไม่ |
gateway.control_ui.allowed_origins_required | วิกฤต | Control UI ที่ไม่ใช่ loopback ไม่มี allowlist ของ browser-origin ที่ระบุชัดเจน | gateway.controlUi.allowedOrigins | ไม่ |
gateway.control_ui.allowed_origins_wildcard | เตือน/วิกฤต | allowedOrigins=["*"] ปิดใช้งาน browser-origin allowlisting | gateway.controlUi.allowedOrigins | ไม่ |
gateway.control_ui.host_header_origin_fallback | เตือน/วิกฤต | เปิดใช้งาน origin fallback จาก Host-header (ลดระดับการป้องกัน DNS rebinding) | gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback | ไม่ |
gateway.control_ui.insecure_auth | เตือน | เปิดใช้งาน toggle ความเข้ากันได้สำหรับ insecure-auth | gateway.controlUi.allowInsecureAuth | ไม่ |
gateway.control_ui.device_auth_disabled | วิกฤต | ปิดใช้งานการตรวจสอบตัวตนของอุปกรณ์ | gateway.controlUi.dangerouslyDisableDeviceAuth | ไม่ |
gateway.real_ip_fallback_enabled | เตือน/วิกฤต | การ trusted fallback X-Real-IP อาจทำให้ปลอมแปลง source-IP ผ่านการตั้งค่า proxy ผิดได้ | gateway.allowRealIpFallback, gateway.trustedProxies | ไม่ |
gateway.token_too_short | เตือน | shared token ที่สั้นเดาแบบ brute force ได้ง่ายขึ้น | gateway.auth.token | ไม่ |
gateway.auth_no_rate_limit | เตือน | Auth ที่เปิดเผยโดยไม่มี rate limiting เพิ่มความเสี่ยง brute-force | gateway.auth.rateLimit | ไม่ |
gateway.trusted_proxy_auth | วิกฤต | ตัวตนของ proxy กลายเป็นขอบเขต auth แล้ว | gateway.auth.mode="trusted-proxy" | ไม่ |
gateway.trusted_proxy_no_proxies | วิกฤต | Auth แบบ trusted-proxy ที่ไม่มี IP proxy ที่ trusted นั้นไม่ปลอดภัย | gateway.trustedProxies | ไม่ |
gateway.trusted_proxy_no_user_header | วิกฤต | Auth แบบ trusted-proxy ไม่สามารถระบุตัวตนผู้ใช้ได้อย่างปลอดภัย | gateway.auth.trustedProxy.userHeader | ไม่ |
gateway.trusted_proxy_no_allowlist | เตือน | Auth แบบ trusted-proxy ยอมรับผู้ใช้ upstream ที่ผ่านการยืนยันตัวตนแล้วทุกคน | gateway.auth.trustedProxy.allowUsers | ไม่ |
gateway.trusted_proxy_allow_loopback | เตือน | การตรวจสอบสิทธิ์พร็อกซีที่เชื่อถือได้ยอมรับแหล่งพร็อกซี loopback ที่อนุญาตไว้อย่างชัดเจน | gateway.auth.trustedProxy.allowLoopback | ไม่ใช่ |
gateway.probe_auth_secretref_unavailable | เตือน | Deep probe ไม่สามารถ resolve SecretRefs สำหรับการตรวจสอบสิทธิ์ในพาธคำสั่งนี้ได้ | แหล่งที่มาการตรวจสอบสิทธิ์ของ deep-probe / ความพร้อมใช้งานของ SecretRef | ไม่ใช่ |
gateway.probe_failed | เตือน/วิกฤต | การ probe Gateway แบบ live ล้มเหลว | การเข้าถึง Gateway/การตรวจสอบสิทธิ์ | ไม่ใช่ |
discovery.mdns_full_mode | เตือน/วิกฤต | โหมดเต็มของ mDNS ประกาศเมตาดาต้า cliPath/sshPort บนเครือข่าย local | discovery.mdns.mode, gateway.bind | ไม่ใช่ |
config.insecure_or_dangerous_flags | เตือน | เปิดใช้งานแฟล็ก debug ที่ไม่ปลอดภัย/อันตรายใด ๆ | หลายคีย์ (ดูรายละเอียด finding) | ไม่ใช่ |
config.secrets.gateway_password_in_config | เตือน | รหัสผ่าน Gateway ถูกจัดเก็บไว้ใน config โดยตรง | gateway.auth.password | ไม่ใช่ |
config.secrets.hooks_token_in_config | เตือน | Hook bearer token ถูกจัดเก็บไว้ใน config โดยตรง | hooks.token | ไม่ใช่ |
hooks.token_reuse_gateway_token | วิกฤต | Token ขาเข้าของ Hook ยังปลดล็อกการตรวจสอบสิทธิ์ของ Gateway ด้วย | hooks.token, gateway.auth.token | ไม่ใช่ |
hooks.token_too_short | เตือน | ทำให้ brute force กับทางเข้า Hook ง่ายขึ้น | hooks.token | ไม่ใช่ |
hooks.default_session_key_unset | เตือน | การรันเอเจนต์ Hook กระจายออกเป็นเซสชันต่อคำขอที่สร้างขึ้น | hooks.defaultSessionKey | ไม่ใช่ |
hooks.allowed_agent_ids_unrestricted | เตือน/วิกฤต | ผู้เรียก Hook ที่ผ่านการตรวจสอบสิทธิ์แล้วอาจ route ไปยังเอเจนต์ที่กำหนดค่าไว้ใดก็ได้ | hooks.allowedAgentIds | ไม่ใช่ |
hooks.request_session_key_enabled | เตือน/วิกฤต | ผู้เรียกภายนอกสามารถเลือก sessionKey ได้ | hooks.allowRequestSessionKey | ไม่ใช่ |
hooks.request_session_key_prefixes_missing | เตือน/วิกฤต | ไม่มีขอบเขตจำกัดรูปแบบคีย์เซสชันภายนอก | hooks.allowedSessionKeyPrefixes | ไม่ใช่ |
hooks.path_root | วิกฤต | พาธ Hook คือ / ทำให้ทางเข้าชนกันหรือถูก route ผิดได้ง่ายขึ้น | hooks.path | ไม่ใช่ |
hooks.installs_unpinned_npm_specs | เตือน | ระเบียนการติดตั้ง Hook ไม่ได้ปักไว้กับ npm specs ที่เปลี่ยนไม่ได้ | เมตาดาต้าการติดตั้ง Hook | ไม่ใช่ |
hooks.installs_missing_integrity | เตือน | ระเบียนการติดตั้ง Hook ไม่มีเมตาดาต้า integrity | เมตาดาต้าการติดตั้ง Hook | ไม่ใช่ |
hooks.installs_version_drift | เตือน | ระเบียนการติดตั้ง Hook drift จากแพ็กเกจที่ติดตั้งไว้ | เมตาดาต้าการติดตั้ง Hook | ไม่ใช่ |
logging.redact_off | เตือน | ค่าที่ละเอียดอ่อนรั่วไหลไปยัง log/status | logging.redactSensitive | ใช่ |
browser.control_invalid_config | เตือน | Config การควบคุมเบราว์เซอร์ไม่ถูกต้องก่อน runtime | browser.* | ไม่ใช่ |
browser.control_no_auth | วิกฤต | การควบคุมเบราว์เซอร์ถูกเปิดเผยโดยไม่มีการตรวจสอบสิทธิ์ด้วย token/password | gateway.auth.* | ไม่ใช่ |
browser.remote_cdp_http | เตือน | CDP ระยะไกลผ่าน HTTP แบบ plain ไม่มีการเข้ารหัสการขนส่ง | browser profile cdpUrl | ไม่ใช่ |
browser.remote_cdp_private_host | เตือน | CDP ระยะไกลชี้ไปยัง host private/internal | browser profile cdpUrl, browser.ssrfPolicy.* | ไม่ใช่ |
sandbox.docker_config_mode_off | เตือน | มี config Sandbox Docker อยู่แต่ไม่ได้ทำงาน | agents.*.sandbox.mode | ไม่ใช่ |
sandbox.bind_mount_non_absolute | เตือน | bind mount แบบ relative อาจ resolve อย่างคาดเดาไม่ได้ | agents.*.sandbox.docker.binds[] | ไม่ใช่ |
sandbox.dangerous_bind_mount | วิกฤต | Sandbox bind mount ชี้ไปยังพาธระบบ ข้อมูลรับรอง หรือ Docker socket ที่ถูกบล็อก | agents.*.sandbox.docker.binds[] | ไม่ใช่ |
sandbox.dangerous_network_mode | วิกฤต | เครือข่าย Sandbox Docker ใช้โหมด namespace-join แบบ host หรือ container:* | agents.*.sandbox.docker.network | ไม่ใช่ |
sandbox.dangerous_seccomp_profile | วิกฤต | โปรไฟล์ Sandbox seccomp ทำให้การแยก container อ่อนลง | agents.*.sandbox.docker.securityOpt | ไม่ใช่ |
sandbox.dangerous_apparmor_profile | วิกฤต | โปรไฟล์ Sandbox AppArmor ทำให้การแยก container อ่อนลง | agents.*.sandbox.docker.securityOpt | ไม่ใช่ |
sandbox.browser_cdp_bridge_unrestricted | เตือน | Sandbox browser bridge ถูกเปิดเผยโดยไม่มีข้อจำกัดช่วงแหล่งที่มา | sandbox.browser.cdpSourceRange | ไม่ใช่ |
sandbox.browser_container.non_loopback_publish | วิกฤต | browser container ที่มีอยู่เผยแพร่ CDP บน interface ที่ไม่ใช่ loopback | config การเผยแพร่ browser sandbox container | ไม่ใช่ |
sandbox.browser_container.hash_label_missing | เตือน | browser container ที่มีอยู่เกิดขึ้นก่อน label config-hash ปัจจุบัน | openclaw sandbox recreate --browser --all | ไม่ใช่ |
sandbox.browser_container.hash_epoch_stale | เตือน | browser container ที่มีอยู่เกิดขึ้นก่อน epoch ของ config เบราว์เซอร์ปัจจุบัน | openclaw sandbox recreate --browser --all | ไม่ใช่ |
tools.exec.host_sandbox_no_sandbox_defaults | เตือน | exec host=sandbox fail closed เมื่อ sandbox ปิดอยู่ | tools.exec.host, agents.defaults.sandbox.mode | ไม่ใช่ |
tools.exec.host_sandbox_no_sandbox_agents | เตือน | exec host=sandbox รายเอเจนต์ fail closed เมื่อ sandbox ปิดอยู่ | agents.list[].tools.exec.host, agents.list[].sandbox.mode | ไม่ใช่ |
tools.exec.security_full_configured | เตือน/วิกฤต | Host exec กำลังรันด้วย security="full" | tools.exec.security, agents.list[].tools.exec.security | ไม่ใช่ |
tools.exec.fs_tools_disabled_but_exec_enabled | เตือน | นโยบายเครื่องมือระบบไฟล์ไม่ได้ทำให้การเรียกใช้ shell เป็นแบบอ่านอย่างเดียว | tools.deny, agents.list[].tools.deny, agents.*.sandbox.workspaceAccess | ไม่ใช่ |
tools.exec.auto_allow_skills_enabled | เตือน | การอนุมัติ Exec เชื่อถือ skill bins โดยปริยาย | ~/.openclaw/exec-approvals.json | ไม่ใช่ |
tools.exec.allowlist_interpreter_without_strict_inline_eval | เตือน | allowlist ของ interpreter อนุญาต inline eval โดยไม่บังคับขออนุมัติใหม่ | tools.exec.strictInlineEval, agents.list[].tools.exec.strictInlineEval, exec approvals allowlist | ไม่ใช่ |
tools.exec.safe_bins_interpreter_unprofiled | เตือน | interpreter/runtime bins ใน safeBins ที่ไม่มีโปรไฟล์ชัดเจนทำให้ความเสี่ยงของ exec กว้างขึ้น | tools.exec.safeBins, tools.exec.safeBinProfiles, agents.list[].tools.exec.* | ไม่ใช่ |
tools.exec.safe_bins_broad_behavior | เตือน | เครื่องมือที่มีพฤติกรรมกว้างใน safeBins ทำให้ trust model แบบ stdin-filter ความเสี่ยงต่ำอ่อนลง | tools.exec.safeBins, agents.list[].tools.exec.safeBins | ไม่ใช่ |
tools.exec.safe_bin_trusted_dirs_risky | เตือน | safeBinTrustedDirs มีไดเรกทอรีที่แก้ไขได้หรือมีความเสี่ยง | tools.exec.safeBinTrustedDirs, agents.list[].tools.exec.safeBinTrustedDirs | ไม่ใช่ |
skills.workspace.symlink_escape | เตือน | Workspace skills/**/SKILL.md resolve ออกนอก root ของ workspace (symlink-chain drift) | สถานะระบบไฟล์ของ workspace skills/** | ไม่ใช่ |
plugins.extensions_no_allowlist | warn | มีการติดตั้ง Plugins โดยไม่มีรายการอนุญาต Plugin อย่างชัดเจน | plugins.allowlist | ไม่ |
plugins.installs_unpinned_npm_specs | warn | ระเบียนดัชนี Plugin ไม่ได้ปักหมุดไว้กับข้อกำหนด npm ที่เปลี่ยนแปลงไม่ได้ | เมตาดาต้าการติดตั้ง Plugin | ไม่ |
plugins.installs_missing_integrity | warn | ระเบียนดัชนี Plugin ไม่มีเมตาดาต้าความถูกต้องครบถ้วน | เมตาดาต้าการติดตั้ง Plugin | ไม่ |
plugins.installs_version_drift | warn | ระเบียนดัชนี Plugin เบี่ยงเบนจากแพ็กเกจที่ติดตั้งไว้ | เมตาดาต้าการติดตั้ง Plugin | ไม่ |
plugins.code_safety | warn/critical | การสแกนโค้ด Plugin พบรูปแบบที่น่าสงสัยหรืออันตราย | โค้ด Plugin / แหล่งติดตั้ง | ไม่ |
plugins.code_safety.entry_path | warn | พาธรายการเข้า Plugin ชี้ไปยังตำแหน่งที่ซ่อนอยู่หรือ node_modules | manifest ของ Plugin entry | ไม่ |
plugins.code_safety.entry_escape | critical | รายการเข้า Plugin หลุดออกจากไดเรกทอรีของ Plugin | manifest ของ Plugin entry | ไม่ |
plugins.code_safety.scan_failed | warn | การสแกนโค้ด Plugin ไม่สามารถทำให้เสร็จสมบูรณ์ได้ | พาธ Plugin / สภาพแวดล้อมการสแกน | ไม่ |
skills.code_safety | warn/critical | เมตาดาต้า/โค้ดของตัวติดตั้ง Skills มีรูปแบบที่น่าสงสัยหรืออันตราย | แหล่งติดตั้ง Skills | ไม่ |
skills.code_safety.scan_failed | warn | การสแกนโค้ด Skills ไม่สามารถทำให้เสร็จสมบูรณ์ได้ | สภาพแวดล้อมการสแกน Skills | ไม่ |
security.exposure.open_channels_with_exec | warn/critical | ห้องที่แชร์/สาธารณะสามารถเข้าถึง agent ที่เปิดใช้งาน exec ได้ | channels.*.dmPolicy, channels.*.groupPolicy, tools.exec.*, agents.list[].tools.exec.* | ไม่ |
security.exposure.open_groups_with_elevated | critical | กลุ่มที่เปิด + เครื่องมือที่ยกระดับสิทธิ์สร้างเส้นทาง prompt-injection ที่ส่งผลกระทบสูง | channels.*.groupPolicy, tools.elevated.* | ไม่ |
security.exposure.open_groups_with_runtime_or_fs | critical/warn | กลุ่มที่เปิดสามารถเข้าถึงเครื่องมือคำสั่ง/ไฟล์โดยไม่มีการป้องกันด้วย sandbox/workspace | channels.*.groupPolicy, tools.profile/deny, tools.fs.workspaceOnly, agents.*.sandbox.mode | ไม่ |
security.trust_model.multi_user_heuristic | warn | Config ดูเหมือนเป็นแบบหลายผู้ใช้ ในขณะที่โมเดลความเชื่อถือของ Gateway เป็นผู้ช่วยส่วนบุคคล | แยกขอบเขตความเชื่อถือ หรือเสริมความแข็งแกร่งสำหรับผู้ใช้ร่วม (sandbox.mode, การ deny/scope เครื่องมือตาม workspace) | ไม่ |
tools.profile_minimal_overridden | warn | การ override ของ agent ข้ามโปรไฟล์ minimal ส่วนกลาง | agents.list[].tools.profile | ไม่ |
plugins.tools_reachable_permissive_policy | warn | เครื่องมือส่วนขยายเข้าถึงได้ในบริบทที่อนุญาตกว้าง | tools.profile + การ allow/deny เครื่องมือ | ไม่ |
models.legacy | warn | ยังมีการกำหนดค่าตระกูลโมเดลแบบเดิมอยู่ | การเลือกโมเดล | ไม่ |
models.weak_tier | warn | โมเดลที่กำหนดค่าไว้อยู่ต่ำกว่าระดับที่แนะนำในปัจจุบัน | การเลือกโมเดล | ไม่ |
models.small_params | critical/info | โมเดลขนาดเล็ก + พื้นผิวเครื่องมือที่ไม่ปลอดภัยเพิ่มความเสี่ยงจากการฉีดคำสั่ง | การเลือกโมเดล + นโยบาย sandbox/เครื่องมือ | ไม่ |
summary.attack_surface | info | สรุปภาพรวมของสถานะ auth, channel, tool และ exposure | หลายคีย์ (ดูรายละเอียด finding) | ไม่ |