Seaworthy 检查参考

Seaworthy 执行的每项检查都有说明。点击任意检查即可查看它发现什么、为什么重要以及如何修复。

安全 (74 项检查)

Hardcoded secrets

id: security.hardcoded-secrets🔗

严重免费
扫描的语言:All

发现什么

API keys, tokens, passwords, connection strings in source

为什么重要

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

怎么做

Move this value to an environment variable and reference it via process.env.

Missing authentication

id: security.auth-missing-endpoints🔗

严重Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Route handler lacks authentication middleware, leaving endpoints unprotected.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Apply authentication middleware to this route handler. Use requireAuth, passport, JWT verification, or session-based auth.

SQL injection surface

id: security.sql-injection-surface🔗

严重Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaSQL

发现什么

Raw string concatenation in SQL queries

为什么重要

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

怎么做

Use parameterised queries or an ORM instead of string interpolation. Never concatenate user input into SQL strings.

OS command injection surface

id: security.os-command-injection🔗

严重免费
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects OS command execution with potentially unsafe arguments

为什么重要

Unsafe execution of dynamic strings as code or shell commands can lead to arbitrary code execution, letting attackers take complete control of the host machine (CWE-94).

怎么做

Avoid shell execution with interpolated strings. Use parameterised APIs (e.g. execFile with args array, subprocess.run with list args).

Dynamic file inclusion

id: security.file-inclusion🔗

严重Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects include/require with user-controlled or dynamic paths

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Avoid dynamic include/require paths from user input. Use an allow-list of permitted files and resolve paths against a trusted base directory.

Unsafe deserialization

id: security.unsafe-deserialization🔗

严重Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects deserialization of untrusted data with pickle, yaml.load, or marshal

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Never deserialize untrusted data. Use yaml.safe_load, JSON, or signed formats. Avoid pickle and marshal on external input.

Hardcoded passwords

id: security.hardcoded-passwords🔗

严重Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects password values assigned directly in source code

为什么重要

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

怎么做

Store passwords in environment variables or a secrets manager. Never commit credentials to source code.

HTML/CSS comment secrets

id: security.html-css-comments-secrets🔗

严重Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Hardcoded secrets inside HTML or CSS comments and commented JSON/config snippets

为什么重要

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

怎么做

Remove secrets from comments and sample config blocks. Move credentials to runtime environment variables or a secure secret manager.

Committed .env file

id: security.committed-env🔗

高免费
扫描的语言:All

发现什么

A .env file is tracked by Git, exposing configuration and potential secrets in version history.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Add .env to .gitignore. If the file is already tracked, use git rm --cached to untrack it without deleting, or rotate any exposed secrets.

Overly permissive CORS

id: security.cors-too-permissive🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJava

发现什么

CORS configuration uses a wildcard origin, allowing requests from any domain.

为什么重要

Weak HTTP headers, CORS policies, or referrer configurations expose the site to clickjacking, data exfiltration, and sensitive data leakage to third parties.

怎么做

Restrict Access-Control-Allow-Origin to your specific frontend domains rather than using a wildcard.

Sensitive data in logs

id: security.sensitive-data-in-logs🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Logging statements may leak sensitive data such as credentials or PII.

为什么重要

Improper logging and monitoring configurations can expose sensitive debugging details to attackers or fail to provide alert visibility during active service outages.

怎么做

Redact sensitive fields before logging. Use a logging library with automatic PII scrubbing or log only non-sensitive summary data.

XSS surface

id: security.xss-surface🔗

高免费
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects XSS-prone APIs such as innerHTML and document.write()

为什么重要

Cross-site scripting (XSS) allows attackers to inject malicious client-side scripts. This can lead to session hijacking, cookie theft, or unauthorized actions on behalf of users (CWE-79).

怎么做

Use textContent, React children, or a sanitization library like DOMPurify instead of innerHTML or document.write().

Shell arbitrary evaluation

id: security.shell-arbitrary-evaluation🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Shell eval or source command uses an unquoted dynamic argument.

为什么重要

Unsafe execution of dynamic strings as code or shell commands can lead to arbitrary code execution, letting attackers take complete control of the host machine (CWE-94).

怎么做

Avoid eval and source for dynamic input. If a shell command is required, validate against an allow-list and pass quoted, fixed arguments.

Unescaped shell path deletion

id: security.shell-unescaped-path-deletion🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

rm command uses an unquoted variable path that may expand unexpectedly.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Quote shell path variables and validate them before deletion. Prefer rm -rf -- "$TARGET_DIR" after checking the path is non-empty and under an expected base directory.

Open redirect

id: security.open-redirect🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects redirects that may use user-controlled URLs

为什么重要

Unvalidated redirects allow attackers to redirect users to malicious websites, facilitating phishing campaigns and social engineering attacks.

怎么做

Validate redirect targets against an allow-list of trusted domains. Never pass raw user input into Location headers.

Unsafe file upload

id: security.unsafe-file-upload🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects file uploads that use user-controlled destination paths

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Validate file type and extension server-side, generate random filenames, and store uploads outside the web root.

HTML inline unsafe script

id: security.html-inline-unsafe-script🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Inline HTML scripts and event handlers should not perform unsafe DOM writes or execute dynamic code

为什么重要

Cross-site scripting (XSS) allows attackers to inject malicious client-side scripts. This can lead to session hijacking, cookie theft, or unauthorized actions on behalf of users (CWE-79).

怎么做

Replace unsafe inline DOM writes and dynamic code with safe DOM APIs, escaped text nodes, and validated event handling.

Weak key/token entropy

id: security.weak-key-entropy🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects low-entropy random generation (under 16 bytes / 128 bits) used for keys, tokens, or identifiers

为什么重要

Low-entropy keys or tokens can be predicted or brute-forced by attackers, leading to bypass of authentication or cryptographic controls (CWE-326).

怎么做

Use at least randomBytes(16) (128 bits) for keys, tokens, and identifiers. For license keys, prefer randomBytes(16) or crypto.getRandomValues() with 16+ bytes.

Insecure API URL default

id: security.insecure-api-url-default🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects HTTP (non-HTTPS) default URLs for API endpoints in configuration code

为什么重要

Using cleartext HTTP defaults for API endpoints exposes communication to man-in-the-middle (MITM) attacks, potentially leaking sensitive data or allowing traffic interception (CWE-319).

怎么做

Default all API URLs to HTTPS. Override via environment variable if needed for local development, but never default to cleartext HTTP for production endpoints.

Command injection via tainted data

id: security.taint-command-injection🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

User-controlled data flows to a command execution sink without sanitisation.

为什么重要

Command injection lets attackers execute arbitrary operating-system commands on your server. This can lead to full server compromise, data exfiltration, or ransomware deployment (CWE-78).

怎么做

Avoid shell execution with interpolated strings. Use parameterised APIs (e.g. execFile with args array).

Path traversal via tainted data

id: security.taint-path-traversal🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

User-controlled data flows to a filesystem sink without path validation.

为什么重要

Path traversal allows attackers to read or write files outside the intended directory, potentially exposing source code, configuration files, or secrets (CWE-22).

怎么做

Resolve paths against a trusted base directory, reject parent-segment sequences, and avoid passing raw user strings into fs APIs.

XXE-vulnerable XML parsing

id: security.xxe-surface🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

XML parser invoked with external entity expansion enabled (e.g. libxml noent: true), enabling XXE attacks.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Disable external entity expansion in the XML parser. Use a library that is XXE-safe by default.

Permissive grants

id: security.permissive-grants🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Granting extensive privileges (like GRANT ALL) to public or anonymous roles is insecure.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Restrict privileges by granting only necessary permissions (e.g. SELECT, INSERT) to specific, authorized roles rather than PUBLIC or anonymous roles.

Missing or weak row-level security

id: security.sql-rls-static🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

PostgreSQL tables containing private tenant data must enable and enforce Row-Level Security (RLS).

为什么重要

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

怎么做

Enable Row-Level Security via ALTER TABLE ... ENABLE ROW LEVEL SECURITY and FORCE ROW LEVEL SECURITY, and define restrictive policies with user boundary checks.

Security definer function search path

id: security.sql-security-definer-search-path🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Functions defined as SECURITY DEFINER execute with privileges of the owner and must lock the search_path to prevent hijacking.

为什么重要

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

怎么做

Add an explicit "SET search_path = public" or trusted schema when creating SECURITY DEFINER functions to lock execution context.

Missing RLS on sensitive tables (Pro)

id: security.sql-missing-rls🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

PostgreSQL tables containing private tenant data must enable and enforce Row-Level Security (RLS).

为什么重要

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

怎么做

Define a policy with CREATE POLICY ... ON ... USING (...) to restrict data access to authorized users.

JWT allows algorithm "none"

id: security.jwt-alg-none🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

JWT verification does not restrict algorithms, allowing forged unsigned tokens via the "none" algorithm

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Always pass an explicit algorithms allowlist to jwt.verify() (e.g. { algorithms: ["HS256"] }). Never accept "none" as a valid algorithm.

Refresh token in localStorage

id: security.refresh-token-in-localstorage🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Refresh tokens or long-lived credentials stored in localStorage are vulnerable to theft via XSS

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Store refresh tokens in httpOnly, Secure, SameSite=Strict cookies — not localStorage or sessionStorage. XSS cannot read httpOnly cookies.

Path traversal surface

id: security.path-traversal🔗

高免费
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

File path constructed by concatenating user input, enabling directory traversal attacks.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Resolve and validate file paths against a base directory. Reject paths containing ../ or absolute paths from user input.

Unsafe innerHTML assignment

id: security.unsafe-innerhtml🔗

高免费
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Assignment to innerHTML can lead to XSS if user input is included.

为什么重要

Cross-site scripting (XSS) allows attackers to inject malicious client-side scripts. This can lead to session hijacking, cookie theft, or unauthorized actions on behalf of users (CWE-79).

怎么做

Use textContent or sanitize HTML before assigning to innerHTML. Use a library like DOMPurify.

Untrusted deserialization

id: security.untrusted-deserialization🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Deserialization of user-controlled data without validation, enabling code execution attacks.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Validate and sanitise deserialized data. Prefer safe parsers with type schemas. Avoid pickle.loads on untrusted input.

XML external entity parsing

id: security.xxe-parsing🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

XML parser called without disabling external entity expansion, enabling XXE attacks.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Disable external entity expansion in the XML parser. Use a library that is XXE-safe by default.

Dangerous eval usage

id: security.dangerous-eval🔗

高免费
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects dangerous dynamic code execution such as eval(), exec(), and new Function()

为什么重要

Unsafe execution of dynamic strings as code or shell commands can lead to arbitrary code execution, letting attackers take complete control of the host machine (CWE-94).

怎么做

Avoid eval(), exec(), and new Function(). Use safer alternatives like JSON.parse for data parsing, or refactor to eliminate dynamic code execution.

HTML missing CSP

id: security.html-missing-csp🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Full HTML pages should include a robust Content Security Policy or receive one from static-host headers

为什么重要

Weak HTTP headers, CORS policies, or referrer configurations expose the site to clickjacking, data exfiltration, and sensitive data leakage to third parties.

怎么做

Add a strong Content Security Policy via the HTML head or static-host headers. Avoid unsafe wildcards and inline execution where possible.

HTML static host headers

id: security.html-static-host-headers🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Static site host config should supply route-wide security headers for browser pages

为什么重要

Weak HTTP headers, CORS policies, or referrer configurations expose the site to clickjacking, data exfiltration, and sensitive data leakage to third parties.

怎么做

Configure route-wide security headers in the static host config, including CSP, Referrer-Policy, X-Content-Type-Options, frame protection, and Permissions-Policy.

HTML referrer leak

id: security.html-referrer-leak🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

target="_blank" anchors or forms without rel protection can leak the referrer and enable tabnabbing

为什么重要

Weak HTTP headers, CORS policies, or referrer configurations expose the site to clickjacking, data exfiltration, and sensitive data leakage to third parties.

怎么做

Add rel="noopener noreferrer" to target="_blank" anchors and forms. Avoid opening untrusted destinations in a new tab without rel protection.

CSS insecure import

id: security.css-insecure-import🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

External CSS imports or URL loads over HTTP can leak content and enable network interception

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Load CSS and fonts over HTTPS only. Remove cleartext HTTP imports and URL loads from stylesheets.

HTML mixed content

id: security.html-mixed-content🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Page resources or embedded styles load over unencrypted HTTP instead of HTTPS

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Upgrade all embedded resource URLs to HTTPS. Avoid loading page assets or embedded styles over cleartext HTTP.

HTML external asset integrity

id: security.html-external-asset-integrity🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Third-party scripts and stylesheets should include subresource integrity and compatible crossorigin attributes

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Add integrity and crossorigin to third-party scripts and stylesheets, or self-host the asset.

HTML insecure form action

id: security.html-insecure-form-action🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Forms submitting over cleartext or scheme-relative URLs can leak user input and bypass transport security

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Submit forms over HTTPS or to a same-origin relative endpoint. Avoid cleartext HTTP and scheme-relative action URLs for sensitive submissions.

HTML iframe sandbox

id: security.html-iframe-sandbox🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

External iframes should use restrictive sandboxing to limit script and origin access

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Add a restrictive sandbox attribute to third-party iframes. Avoid combining allow-scripts and allow-same-origin unless the content is fully trusted.

HTML unsafe embed

id: security.html-unsafe-embed🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

External object and embed elements should not load active plugin content without tight type restrictions

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Prefer sandboxed iframes or self-hosted assets. Avoid loading third-party plugin content with object or embed, and restrict MIME types to safe passive content where possible.

HTML meta refresh redirect

id: security.html-meta-redirect🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Short-delay meta refresh redirects can be used for phishing, open redirects, or policy bypasses

为什么重要

Unvalidated redirects allow attackers to redirect users to malicious websites, facilitating phishing campaigns and social engineering attacks.

怎么做

Replace meta refresh redirects with server-side redirects or validated client navigation. Avoid short-delay refreshes that point to external URLs or internal paths.

HTML base tag hijack

id: security.html-base-tag-hijack🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

External or mispositioned base tags can rewrite relative URLs and alter page navigation

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Remove external base tags or place a same-origin base URL inside <head>. Avoid base target="_blank" on untrusted pages.

HTML import map integrity

id: security.html-import-map-integrity🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Import maps should not redirect module specifiers to external origins without trust controls

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Keep import map entries on same-origin or relative URLs. Avoid mapping module specifiers to external CDNs unless you can trust and verify the source.

CSS data exfiltration

id: security.css-data-exfiltration🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Attribute selectors combined with external HTTP URLs can exfiltrate sensitive values from forms

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Remove attribute-selector rules that fetch external URLs. Keep sensitive form value matching and URL loads out of untrusted CSS.

CSS external font integrity

id: security.css-external-font-integrity🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

External CDN fonts loaded from @font-face can be supply-chain risks when self-hosting is not used

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Self-host font files or use a trusted local font source. Avoid loading fonts from public CDNs in production stylesheets.

Insecure random number generator

id: security.insecure-random🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects use of non-cryptographic random in security-sensitive contexts

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Use a cryptographically secure random generator (e.g. crypto.getRandomValues() in JS, secrets module in Python, SecureRandom in Java, crypto/rand in Go).

Dynamic SQL column names

id: security.dynamic-sql-columns🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects template literal or string interpolation used to build SQL column names, which can allow injection if values come from user input

为什么重要

Interpolating dynamic column names in SQL queries bypasses parameterized query protection, introducing SQL injection risks where attackers can manipulate database structures (CWE-89).

怎么做

Use a whitelist mapping from input keys to allowed column names. Never interpolate user-supplied strings into SQL column positions.

Weak email validation regex

id: security.weak-email-validation🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects overly permissive email validation regexes that accept invalid or unsafe inputs

为什么重要

Overly permissive email validation patterns allow malformed, spoofed, or malicious inputs to bypass business rules, leading to account validation issues or data corruption (CWE-20).

怎么做

Use a stricter regex pattern (e.g. RFC 5322 subset) or a dedicated email validation library (e.g. Zod .email(), validator.js isEmail). At minimum, require a domain with a TLD of 2+ characters.

Structured idempotency key

id: security.idempotency-key-leak🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects idempotency keys containing structured identifiers (subscription IDs, license IDs) that leak business data to external providers

为什么重要

Embedding structured internal identifiers in idempotency keys leaks business-sensitive data (such as subscription or license IDs) to payment providers or third-party log systems (CWE-200).

怎么做

Generate idempotency keys using randomUUID() or an HMAC derived from the operation key. Never embed subscription IDs, license IDs, or other business identifiers that external providers could log.

XSS via tainted data

id: security.taint-xss🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

User-controlled data flows to an XSS sink without sanitisation.

为什么重要

An attacker who can control data sent to an XSS sink can inject malicious scripts that execute in victims' browsers. This can lead to session hijacking, credential theft, or defacement.

怎么做

Sanitise user input before rendering. Use encodeURIComponent for URLs, or a library like DOMPurify for HTML.

SQL injection via tainted data

id: security.taint-sql-injection🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

User-controlled data flows to a SQL query sink without parameterisation.

为什么重要

SQL injection allows attackers to read, modify, or delete database records. It is consistently one of the most common and damaging web vulnerabilities (CWE-89).

怎么做

Use parameterised queries or an ORM. Never concatenate user input into SQL strings.

Open redirect via tainted data

id: security.taint-open-redirect🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

User-controlled data flows to a redirect sink without URL validation.

为什么重要

Unvalidated redirects allow attackers to redirect users to malicious websites, facilitating phishing campaigns and social engineering attacks.

怎么做

Validate redirect targets against an allow-list of trusted domains. Never pass raw user input into redirect helpers or Location headers.

Prototype pollution via tainted data

id: security.taint-prototype-pollution🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

User-controlled data flows to an object merge or assignment sink without sanitisation.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Validate and block __proto__, constructor, and prototype keys before merging objects. Use Object.create(null) for dictionaries.

Code execution via tainted data

id: security.taint-code-execution🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

User-controlled data flows to a dynamic code execution sink without sanitisation.

为什么重要

Unsafe execution of dynamic strings as code or shell commands can lead to arbitrary code execution, letting attackers take complete control of the host machine (CWE-94).

怎么做

Avoid eval(), exec(), and new Function() with user input. Use safer alternatives like JSON.parse for data parsing.

Missing CSRF protection

id: security.missing-csrf-protection🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

State-changing route handler without visible CSRF token verification.

为什么重要

Cross-Site Request Forgery (CSRF) allows malicious sites to perform actions on behalf of authenticated users without their consent, potentially leading to unauthorized state modifications.

怎么做

Add CSRF token verification to all state-changing endpoints. Use a CSRF middleware for your framework.

Weak session identifier

id: security.weak-session-id🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Session identifier derived from user-controlled or predictable input.

为什么重要

Weak session identifiers or insecure cookies can be intercepted or predicted by attackers, leading to session hijacking and unauthorized account access.

怎么做

Generate session identifiers server-side with a cryptographically secure random source. Never accept client-supplied session IDs.

Rails mass assignment

id: security.rails-mass-assignment🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Active Record model created or updated with raw params hash, bypassing strong parameters.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Use strong parameters with params.require(:model).permit(:attr1, :attr2) to whitelist allowed attributes.

Rails insecure session config

id: security.rails-insecure-session-config🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Session cookie is missing secure flags (secure, httponly, same_site).

为什么重要

Weak session identifiers or insecure cookies can be intercepted or predicted by attackers, leading to session hijacking and unauthorized account access.

怎么做

Set secure: true, httponly: true, and same_site: :strict on session cookies in config/initializers/session_store.rb.

Unhedged unsafe blocks

id: security.rust-unsafe-blocks🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Usage of unsafe blocks without a preceding safety documentation comment.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Document every unsafe block with a preceding "// SAFETY: <explanation>" comment explaining why the invariants are satisfied.

Missing HTTP security headers

id: security.missing-security-headers🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Application does not set HTTP security response headers (HSTS, X-Content-Type-Options, X-Frame-Options, Permissions-Policy)

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Add helmet() (Node.js) or equivalent security-header middleware. At minimum set Strict-Transport-Security, X-Content-Type-Options: nosniff, X-Frame-Options, and Permissions-Policy.

Unpinned GitHub Actions

id: security.gh-actions-unpinned🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

GitHub Actions workflow steps reference third-party actions by mutable tag rather than a full commit SHA

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Pin every third-party action to a full 40-character commit SHA, e.g. uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683. Use a tool like Renovate or pin-github-action to automate this.

GraphQL introspection in production

id: security.graphql-introspection-prod🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

GraphQL server exposes introspection without disabling it for production environments

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Disable GraphQL introspection in production: set introspection: process.env.NODE_ENV !== "production" in Apollo Server, or use a validationRules plugin that blocks introspection queries.

GraphQL missing depth limit

id: security.graphql-no-depth-limit🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

GraphQL server has no query depth or complexity limiting, enabling denial-of-service via deeply nested queries

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Add query depth limiting with graphql-depth-limit or complexity analysis with graphql-query-complexity. Wire the validation rule into ApolloServer validationRules or the equivalent for your framework.

JWT issued without expiry

id: security.jwt-no-expiry🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

JWT tokens are signed without an expiry claim (exp / expiresIn), making them valid indefinitely

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Set a short expiry on all issued JWTs using expiresIn (jsonwebtoken), .setExpirationTime() (jose), or an "exp" claim in the payload (PyJWT). Use refresh tokens to extend sessions.

Broken cryptographic algorithm

id: security.broken-crypto-algorithm🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Use of a deprecated or broken encryption algorithm such as DES or RC4.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Use AES-256-GCM or ChaCha20-Poly1305. Never use DES, RC4, or ECB mode.

HTTP method override

id: security.http-method-override🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

methodOverride middleware enabled, allowing clients to override HTTP methods via query parameters or headers.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Disable methodOverride or restrict it to trusted clients. Prefer standard HTTP methods.

HTTP URL without TLS

id: security.http-no-tls🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Hardcoded HTTP URL that should use HTTPS for transport security.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Use HTTPS URLs. Configure HSTS and redirect HTTP to HTTPS at the server level.

Weak encryption mode

id: security.weak-encryption-mode🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Use of a raw cipher initialisation that may lack authentication (AEAD).

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Use authenticated encryption (AES-256-GCM, ChaCha20-Poly1305). Avoid raw CBC/CTR without a MAC.

Weak hash algorithm

id: security.weak-hash-algorithm🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Use of a cryptographically weak hash function such as MD5 or SHA1.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Use SHA-256 or stronger. For password hashing use bcrypt, scrypt, or Argon2.

Unsafe document.write usage

id: security.no-document-write🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects the use of document.write which can lead to XSS vulnerabilities

为什么重要

Cross-site scripting (XSS) allows attackers to inject malicious client-side scripts. This can lead to session hijacking, cookie theft, or unauthorized actions on behalf of users (CWE-79).

怎么做

Avoid document.write(). Use DOM APIs like appendChild(), innerHTML with sanitization, or a templating system instead.

HTML javascript URI

id: security.html-javascript-uri🔗

低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

javascript: URLs execute code directly from HTML attributes and can enable XSS-style execution

为什么重要

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

怎么做

Replace javascript: URLs with normal links or buttons and event handlers. Avoid direct script execution in HTML attributes.

Excessive GitHub Actions permissions

id: security.gh-actions-excessive-permissions🔗

低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

GitHub Actions workflow grants overly broad or undeclared default permissions

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Add a top-level "permissions: {}" block and grant only the minimum scopes needed per job, e.g. "permissions: { contents: read }".

韧性 (19 项检查)

No input validation

id: resilience.no-input-validation🔗

🧠 AI 辅助高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

User input is not validated before processing, increasing risk of injection and data corruption.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Validate user input with a schema library like zod, joi, or yup. Set request size limits on your HTTP server.

Missing error handling

id: resilience.missing-error-handling🔗

🧠 AI 辅助高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Async operations lack error handling, which may cause unhandled rejections or crashes.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Add try/catch blocks around async operations. Ensure all promises have .catch() handlers or are inside an async function with error handling.

Swallowed catch block

id: resilience.swallowed-catch🔗

🧠 AI 辅助高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Empty catch blocks swallow errors without handling

为什么重要

Swallowed errors hide bugs, make debugging impossible in production, and can mask security incidents such as failed authentication attempts or database corruption (CWE-391).

怎么做

Add proper error handling in catch blocks. Log errors, re-throw when appropriate, or handle the specific error case.

Destructive migration operation

id: resilience.destructive-sql-migration🔗

🧠 AI 辅助高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Destructive operations like DROP TABLE, DROP COLUMN, or TRUNCATE pose high risk of data loss.

为什么重要

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

怎么做

Verify that this destructive change is intended and has safe rollback/data preservation procedures in place.

Broad data mutation

id: resilience.sql-broad-mutation🔗

🧠 AI 辅助高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

UPDATE or DELETE statements without a WHERE clause (or with a tautology like WHERE true) mutate the entire table.

为什么重要

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

怎么做

Specify a restrictive WHERE clause on the UPDATE or DELETE statement to target only intended rows.

Routing handler thread-panics

id: resilience.rust-handler-panics🔗

🧠 AI 辅助高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Use of panicking methods like unwrap or expect inside asynchronous routing handlers.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Avoid calling unwrap(), expect(), or panic!() inside async routing handlers. Propagate errors using the "?" operator, or return a Result with a proper error response.

No rate limiting

id: resilience.no-rate-limiting🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Public API endpoints lack rate limiting, making them vulnerable to abuse and DoS attacks.

为什么重要

Without resource limits, timeouts, or circuit breakers, failures in external dependencies or traffic spikes can consume system threads and exhaust resources, causing outages.

怎么做

Add rate-limiting middleware to public routes. Use express-rate-limit, rate-limiter-flexible, or a gateway-level limiter.

No pagination

id: resilience.no-pagination🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

List endpoints return unlimited results without pagination, risking performance degradation.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Add LIMIT and OFFSET (or .limit() / .skip() in your ORM) to list queries. Use cursor-based pagination for large datasets.

Missing timeout

id: resilience.missing-timeout🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

HTTP requests or database queries lack timeouts, potentially causing indefinite hangs.

为什么重要

Without resource limits, timeouts, or circuit breakers, failures in external dependencies or traffic spikes can consume system threads and exhaust resources, causing outages.

怎么做

Add a timeout to this HTTP call. Use AbortSignal.timeout() for fetch, or the timeout option for axios.

No retry logic

id: resilience.no-retry-logic🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

External service calls lack retry logic, reducing resilience to transient failures.

为什么重要

Without resource limits, timeouts, or circuit breakers, failures in external dependencies or traffic spikes can consume system threads and exhaust resources, causing outages.

怎么做

Wrap external calls with retry logic using p-retry, async-retry, or implement exponential backoff manually.

Webhook and Subscription Processing Defects

id: resilience.webhook-processing-defects🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Checks webhook handlers for missing signature checks, missing idempotency, out-of-order delivery race conditions, and lack of reconciliation fallbacks.

为什么重要

Relying on payments provider webhooks without verifying signatures leads to security bypasses, while missing idempotency, sequence checks, or active sync checks causes out-of-sync subscriptions and payment processing loops.

怎么做

Validate headers using webhook signature secrets, log and check event IDs in a persistent cache or database, compare events occurred_at timestamps, and implement a cron fallback or check-on-access reconciliation mechanism to query the payments provider API.

HTML inline resilience

id: resilience.html-inline-resilience🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Inline script blocks should handle network failures explicitly and avoid infinite retries or swallowed errors

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Add timeout, retry, and explicit error handling to inline fetch/XHR logic. Avoid empty catch blocks and infinite retry loops in page scripts.

Missing backoff jitter

id: resilience.no-backoff-jitter🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Retry loops without jitter cause thundering herd

为什么重要

Without jitter, all retries from multiple clients can align and overwhelm a recovering service, causing cascading failures (CWE-770).

怎么做

Add exponential backoff with jitter to retry logic. Use a library like p-retry or implement jitter with Math.random().

Missing circuit breaker

id: resilience.no-circuit-breaker🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Missing circuit breaker around external calls

为什么重要

Without a circuit breaker, a failing downstream service can tie up all your connections and threads, causing your own service to fail (CWE-1042).

怎么做

Add a circuit breaker around external service calls. Use a library like opossum or implement a simple state machine.

Infinite retry loop

id: resilience.infinite-retry🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Retry loops without max-attempts

为什么重要

Infinite retries can exhaust memory, CPU, and network resources. They also delay failure detection, making incident response harder (CWE-834).

怎么做

Add a maximum attempt counter to retry loops. Use a for loop with a fixed limit or a while loop with a counter and break condition.

Missing transaction guard in large migrations

id: resilience.missing-transaction-guard🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Large migrations with multiple data mutations should run inside a transaction to prevent partial applications and state corruption.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Wrap the entire migration script inside a transaction using BEGIN; and COMMIT; statements.

ORM N+1 query pattern

id: resilience.orm-n-plus-one🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

ORM results are iterated with a per-row database query instead of a single batch load

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Replace per-row queries inside loops with a single batch query using include/eager loading (Prisma include, Sequelize eager loading, SQLAlchemy joinedload, ActiveRecord includes).

Missing memory limit

id: resilience.missing-memory-limit🔗

🧠 AI 辅助低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Buffer.alloc used without a maximum size check for user-controlled sizes.

为什么重要

Without resource limits, timeouts, or circuit breakers, failures in external dependencies or traffic spikes can consume system threads and exhaust resources, causing outages.

怎么做

Enforce a maximum allocation size before calling Buffer.alloc. Reject user-controlled sizes above a safe threshold.

Missing timeout configuration

id: resilience.missing-timeout-config🔗

🧠 AI 辅助低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

HTTP client call without an explicit timeout configuration.

为什么重要

Without resource limits, timeouts, or circuit breakers, failures in external dependencies or traffic spikes can consume system threads and exhaust resources, causing outages.

怎么做

Add a timeout to HTTP requests. Use AbortSignal.timeout() for fetch or the timeout option for axios.

运维基础 (15 项检查)

Secrets in Dockerfile ENV

id: ops.dockerfile-secrets-in-env🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Dockerfile bakes secrets or credentials into image layers via ENV or ARG instructions

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Never pass secrets via ENV or ARG — they persist in image history. Use Docker BuildKit secrets (RUN --mount=type=secret), environment variables injected at container start, or a secrets manager.

No version control

id: ops.no-version-control🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

No Git repository detected. Version control is essential for collaboration and code recovery.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Initialize a Git repository with git init and commit your code. Regular commits provide history, collaboration, and a safety net for recovery.

No graceful shutdown

id: ops.no-graceful-shutdown🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Server lacks graceful shutdown handling, risking dropped requests and data loss on restart.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Listen for SIGTERM and SIGINT signals. Gracefully close server connections and drain in-flight requests before exiting.

Missing observability

id: ops.missing-observability🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

No metrics, tracing, or structured telemetry hooks

为什么重要

Without observability, you cannot detect outages, debug performance regressions, or measure the impact of deployments. Incidents become blind hunts (CWE-778).

怎么做

Add metrics, tracing, or structured logging to your service. Use libraries like prom-client, dd-trace, or OpenTelemetry to emit observable telemetry.

Secret rotation friction

id: ops.secret-rotation-friction🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Hardcoded secret paths impeding automated rotation

为什么重要

When secrets are hardcoded, rotating them requires a code change, review, build, and deployment. This friction leads to long-lived secrets and increases blast radius if a credential is leaked (CWE-798).

怎么做

Load secrets from a secret manager (e.g., AWS Secrets Manager, HashiCorp Vault, Azure Key Vault) instead of hardcoding them. This enables automated rotation without redeploying code.

Environment drift

id: ops.env-drift🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

.env.example is out of sync with runtime environment variable usage

为什么重要

Drift between `.env.example` and runtime usage causes deployment failures, hidden misconfigurations, and secret sprawl. New developers may miss required variables (CWE-1188).

怎么做

Keep .env.example in sync with the variables your code reads at runtime. Add a CI check or lint rule that flags missing or unused environment variables.

Dockerfile runs as root

id: ops.dockerfile-runs-as-root🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Container image has no non-root USER directive — all processes run as root

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Create a non-root user and switch to it before CMD/ENTRYPOINT: RUN addgroup -S app && adduser -S app -G app followed by USER app.

Debug mode enabled

id: ops.debug-mode-enabled🔗

低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Debug / verbose logging enabled in production config or source code

为什么重要

Improper logging and monitoring configurations can expose sensitive debugging details to attackers or fail to provide alert visibility during active service outages.

怎么做

Disable debug logging and verbose mode in production. Use environment-specific config files or flags.

Hardcoded localhost

id: ops.hardcoded-localhost🔗

低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

localhost URL is hardcoded rather than configured via environment variables.

为什么重要

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

怎么做

Replace localhost with a configurable base URL. Use environment variables or a config module.

No health check endpoint

id: ops.no-health-check🔗

低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

No health check endpoint is defined, making it harder to monitor service availability.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Add a /health or /healthz endpoint that returns a 200 status when your service is operational.

Missing structured logging

id: ops.missing-structured-logging🔗

低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Logging uses unstructured format, making log analysis and monitoring more difficult.

为什么重要

Improper logging and monitoring configurations can expose sensitive debugging details to attackers or fail to provide alert visibility during active service outages.

怎么做

Use a structured logging library like pino or winston with JSON output for machine-readable logs.

Dockerfile missing HEALTHCHECK

id: ops.dockerfile-no-healthcheck🔗

低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Dockerfile has no HEALTHCHECK instruction — container orchestrators cannot detect unhealthy state

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Add a HEALTHCHECK instruction, e.g.: HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:8080/health || exit 1

Missing .dockerignore

id: ops.missing-dockerignore🔗

低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Dockerfile is present without a .dockerignore — build context may include node_modules, .env files, or other sensitive data

为什么重要

即将推出 - 我们正在为每项检查撰写详细说明。

怎么做

Add a .dockerignore file listing directories and files to exclude from the build context: node_modules, .env, .git, *.log, dist, coverage.

Hardcoded port

id: ops.hardcoded-port🔗

低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Server port number hardcoded rather than configured via environment variables.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Use process.env.PORT with a fallback value. Never hardcode port numbers in source.

Insecure file permissions

id: ops.insecure-file-permissions🔗

低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

fs.chmod call that may set overly permissive file permissions.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Use the most restrictive file permissions possible. Prefer 0o600 for secrets, 0o644 for config.

依赖卫生 (10 项检查)

Missing lockfile

id: dependencies.missing-lockfile🔗

高免费
扫描的语言:JSTSPythonGoRuby

发现什么

No lockfile found. Unpinned dependencies are a reproducibility and supply-chain risk.

为什么重要

Unpinned dependency versions make builds non-deterministic and expose the application to unexpected breaking updates or supply-chain attacks.

怎么做

Commit a lockfile (package-lock.json, yarn.lock, pnpm-lock.yaml, Gemfile.lock, go.sum, composer.lock) or Maven/Gradle reproducibility artifacts (mvnw, gradle.lockfile) to pin exact dependency versions.

Known CVEs in dependencies

id: dependencies.known-cves🔗

高免费
扫描的语言:JSTSPythonGoRuby

发现什么

Dependencies have known security vulnerabilities with published CVEs.

为什么重要

Dependencies with known CVEs introduce documented vulnerabilities that attackers can exploit to compromise the application. Keeping packages updated is a core security baseline.

怎么做

Run npm audit fix or upgrade the affected dependency to a patched version.

HTML CDN vulnerable versions

id: dependencies.html-cdn-vulnerable-versions🔗

高Pro
扫描的语言:JSTSPythonGoRuby

发现什么

CDN-loaded scripts and stylesheets can expose known-vulnerable library versions

为什么重要

Dependencies with known CVEs introduce documented vulnerabilities that attackers can exploit to compromise the application. Keeping packages updated is a core security baseline.

怎么做

Upgrade the CDN asset to a patched version or self-host the library with a pinned release and integrity controls.

Known CVEs in Cargo dependencies

id: dependencies.cargo-known-cves🔗

高免费
扫描的语言:JSTSPythonGoRuby

发现什么

Cargo.lock dependencies have known security advisories from the RustSec database.

为什么重要

Dependencies with known CVEs introduce documented vulnerabilities that attackers can exploit to compromise the application. Keeping packages updated is a core security baseline.

怎么做

Run `cargo update` to upgrade to a patched version. Check the RustSec advisory for migration guidance.

Known CVEs in Bundler dependencies

id: dependencies.bundler-known-cves🔗

高免费
扫描的语言:JSTSPythonGoRuby

发现什么

Gemfile.lock dependencies have known security advisories from the Ruby advisory database.

为什么重要

Dependencies with known CVEs introduce documented vulnerabilities that attackers can exploit to compromise the application. Keeping packages updated is a core security baseline.

怎么做

Run `bundle update` to upgrade affected gems, or `bundle audit check` to list advisories. Pin patched versions in your Gemfile.

Dev dependencies in production

id: dependencies.dev-deps-in-prod🔗

中Pro
扫描的语言:JSTSPythonGoRuby

发现什么

Development-only dependencies are installed in the production dependency tree.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Move this dependency from dependencies to devDependencies in package.json.

Unpinned dependency versions

id: dependencies.unpinned-versions🔗

中Pro
扫描的语言:JSTSPythonGoRuby

发现什么

Package.json contains version ranges (^, ~, *, latest) instead of exact pinned versions.

为什么重要

Unpinned dependency versions make builds non-deterministic and expose the application to unexpected breaking updates or supply-chain attacks.

怎么做

Pin this dependency to an exact version. Replace ^, ~, *, or latest with a specific version number.

HTML CDN unpinned versions

id: dependencies.html-cdn-unpinned-versions🔗

中Pro
扫描的语言:JSTSPythonGoRuby

发现什么

CDN dependencies without exact versions can change unexpectedly and should be pinned

为什么重要

Unpinned dependency versions make builds non-deterministic and expose the application to unexpected breaking updates or supply-chain attacks.

怎么做

Pin the CDN asset to an exact version and use Subresource Integrity or self-host the dependency.

Unpinned Cargo dependency versions

id: dependencies.cargo-unpinned-versions🔗

中Pro
扫描的语言:JSTSPythonGoRuby

发现什么

Cargo.toml dependency with wildcard, bare semver, or unpinned git reference. Pin to an exact version.

为什么重要

Unpinned dependency versions make builds non-deterministic and expose the application to unexpected breaking updates or supply-chain attacks.

怎么做

Pin to an exact semver version (e.g. "1.2.3"). For git dependencies, include a rev, tag, or branch.

Deprecated function usage

id: dependencies.deprecated-functions🔗

低Pro
扫描的语言:JSTSPythonGoRuby

发现什么

Use of a Node.js or library function that has been deprecated.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Replace deprecated functions with their recommended alternatives. Check the library migration guide.

配置 (5 项检查)

Secrets in source

id: configuration.secrets-in-source🔗

高免费
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Secrets in source rather than environment variables

为什么重要

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

怎么做

Use environment variables instead. Store the secret value in process.env and reference it by key name.

Default credentials

id: configuration.default-credentials🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Default or hardcoded credentials are used instead of unique, environment-specific credentials.

为什么重要

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

怎么做

Change default credentials immediately. Use strong, unique passwords and store them in environment variables.

TLS verification disabled

id: configuration.missing-ssl-verification🔗

高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

rejectUnauthorized set to false, disabling TLS certificate validation.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Never set rejectUnauthorized to false in production. Use proper TLS certificates.

No environment separation

id: configuration.no-env-separation🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Configuration does not differentiate between development, staging, and production environments.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Create separate config files per environment or use environment variables to differentiate dev/staging/prod settings.

id: configuration.insecure-cookie-flags🔗

中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Cookie set without explicit security flags (HttpOnly, Secure, SameSite).

为什么重要

Weak session identifiers or insecure cookies can be intercepted or predicted by attackers, leading to session hijacking and unauthorized account access.

怎么做

Set HttpOnly, Secure, and SameSite=Strict on session cookies.

数据暴露 (12 项检查)

Verbose error messages

id: data-exposure.verbose-errors🔗

🧠 AI 辅助高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Error responses include stack traces or internal details, leaking implementation information to clients.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Catch errors in your middleware and return generic error messages to clients. Log the full error server-side only.

PII in API responses

id: data-exposure.pii-in-responses🔗

🧠 AI 辅助高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

API responses include personally identifiable information without proper filtering.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Filter API responses to exclude PII fields. Use select or projection to return only necessary fields.

No response filtering

id: data-exposure.no-response-filtering🔗

🧠 AI 辅助高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

API responses return full database rows without filtering sensitive or unnecessary fields.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Select only the fields you need from database queries. Never return full rows to clients without filtering.

Sensitive columns without protection

id: data-exposure.unprotected-sensitive-sql-columns🔗

🧠 AI 辅助高Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Storing highly sensitive fields (like SSNs, cards, or plain API keys) without encryption or hashing poses high data exposure risks.

为什么重要

Unsafe database interactions and weak permissions allow SQL injection or unauthorized data exposure, compromising data confidentiality and integrity.

怎么做

Encrypt sensitive data columns at rest, or use hashed/digest representations for fields like passwords or API tokens.

HTML form PII exposure

id: data-exposure.html-form-pii-exposure🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Forms should not keep PII in hidden inputs or expose sensitive autofill settings on fields

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Avoid storing PII in hidden inputs and set autocomplete="off" on sensitive fields. Keep sensitive data server-side when possible.

Secret in plaintext email

id: data-exposure.plaintext-secret-in-email🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Detects license keys, tokens, or API keys rendered in plain-text email bodies without warning that email is not encrypted in transit

为什么重要

Sending license keys or credentials in plaintext email bodies exposes them to interception or unauthorized access, as standard email is not encrypted in transit (CWE-319).

怎么做

Add a warning to the plain-text email body that email is not encrypted in transit. Consider omitting the secret from the plain-text part entirely, or linking to a secure dashboard instead.

Composite PII fields

id: data-exposure.composite-pii🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Multiple PII attributes collected together enabling re-identification

为什么重要

Combining seemingly harmless fields can uniquely identify individuals. This violates privacy regulations (GDPR, CCPA) and exposes users to identity theft (CWE-359).

怎么做

Split or pseudonymise composite PII fields. Avoid storing multiple identifying attributes in the same record or API response.

Derived identifiers

id: data-exposure.derived-identifiers🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Derived or synthetic identifiers that enable record linkage across sessions or datasets

为什么重要

Derived identifiers can re-identify pseudonymised users and track them without their consent. This undermines privacy guarantees and may violate regulations (CWE-359).

怎么做

Avoid creating derived identifiers from user data for tracking or correlation. Use anonymous session tokens that cannot be reversed to identify the user.

Unredacted logs

id: data-exposure.unredacted-logs🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

PII or sensitive data written to logs without redaction

为什么重要

Logs are often stored in plaintext, aggregated across services, and accessible to many engineers. Unredacted PII in logs is a frequent source of data breaches and compliance violations (CWE-532).

怎么做

Redact or mask sensitive fields before logging. Use a structured logging library with automatic PII scrubbing or log only non-sensitive summary data.

Sensitive data in localStorage

id: data-exposure.localstorage-sensitive-data🔗

🧠 AI 辅助中Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Storing sensitive data (password, token, secret) in localStorage is insecure.

为什么重要

Failing to address this issue can lead to security vulnerabilities, operational failures, or data exposure, compromising the safety and reliability of your application.

怎么做

Do not store sensitive data in localStorage. Use httpOnly cookies or secure server-side storage.

Debugger or production debug statement

id: data-exposure.debug-artifacts🔗

🧠 AI 辅助低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

Debugger statement or debug import left in production code, potentially exposing runtime state.

为什么重要

Improper logging and monitoring configurations can expose sensitive debugging details to attackers or fail to provide alert visibility during active service outages.

怎么做

Remove debugger statements and debug imports before deploying to production.

Hardcoded IP address

id: data-exposure.hardcoded-ip🔗

🧠 AI 辅助低Pro
扫描的语言:JSTSTSXPythonGoPHPRubyJavaRustBash

发现什么

A literal IP address in source code, which may leak internal infrastructure details.

为什么重要

Exposing secrets or environment configuration details in source code makes them accessible to unauthorized users and increases the threat surface of the infrastructure.

怎么做

Move IP addresses to configuration or environment variables. Use DNS names where possible.