Security
· 13 checks — HTTP headers, CSP, TLS handshake, and cookie hygiene rolled into one auditable list.FSecurity HeadersAction1 of 10 headers properly configuredFIX
Strict-Transport-Security forces browsers to use HTTPS, preventing downgrade attacks. Add the header with a max-age of at least 1 year.
max-age=31536000; includeSubDomainsWithout HSTS, a network attacker can downgrade the very first connection to HTTP and steal the user's session.
Learn more ▾ ▴
HSTS tells browsers 'never speak HTTP to this domain again.' Without it, a network attacker (public WiFi, malicious ISP, hostile DNS) intercepts the first HTTP attempt and serves a downgraded version of your site. One header, big surface reduction.
Source: RFC 6797 / OWASP
CSP is the most important header for preventing XSS attacks. See the CSP section for detailed analysis.
default-src 'self'Without a CSP, a single XSS bug can exfiltrate everything your users type — including credentials.
Learn more ▾ ▴
Content-Security-Policy is the browser-enforced firewall against XSS. With a strict CSP, a script injection that would otherwise steal session cookies or rewrite the page is silently blocked. Without it, your only defense is hoping every input on every form is escaped correctly forever.
Source: OWASP / MDN
This header prevents MIME-type sniffing, which can lead to XSS attacks. Set it to 'nosniff'.
nosniffMIME sniffing lets browsers run uploaded files as JavaScript, turning a file upload into an XSS.
Learn more ▾ ▴
Setting X-Content-Type-Options: nosniff tells browsers to trust your declared Content-Type instead of guessing. Without it, an attacker who uploads a polyglot file can sometimes get it executed as a script. One header, no downside.
Source: OWASP / MDN
This header prevents clickjacking by controlling who can embed your page in a frame. Set it to DENY or SAMEORIGIN.
DENYWithout frame protection, your site can be embedded in a hostile page and used for clickjacking.
Learn more ▾ ▴
Clickjacking overlays your site under a transparent malicious page so users click invisible buttons. Setting X-Frame-Options: DENY (or a modern frame-ancestors CSP directive) blocks the embedding entirely. There's almost never a legitimate reason to allow it.
Source: OWASP / MDN
Controls how much referrer information is sent with requests. Set to 'strict-origin-when-cross-origin' or stricter.
strict-origin-when-cross-originDefault browser behavior leaks full URLs (including query params and tokens) to every third-party resource — set a strict policy.
Learn more ▾ ▴
Without a Referrer-Policy header, browsers send the full referring URL with images, scripts, and fonts loaded from third-party origins. URLs containing tokens, user IDs, or session params end up in third-party logs. Set `Referrer-Policy: strict-origin-when-cross-origin` (or stricter) to limit leakage.
Source: MDN / W3C
Controls which browser features (camera, microphone, geolocation) are allowed. Set it to restrict unused features.
geolocation=(), camera=(), microphone=()Permissions-Policy locks down browser APIs you don't use — without it, every page can request camera/mic/geolocation if XSS lands.
Learn more ▾ ▴
By default every page can request the camera, microphone, geolocation, payment APIs, and dozens more. Permissions-Policy turns off the ones you don't need so a future bug can't quietly start using them. It's a defense-in-depth header — one line, big surface reduction.
Source: MDN / W3C
COOP isolates your browsing context, preventing cross-origin side-channel attacks. Set to 'same-origin'.
same-originCOOP isolates your top-level browsing context from cross-origin windows — without it, popup-based side-channel attacks remain possible.
Learn more ▾ ▴
Cross-Origin-Opener-Policy: same-origin prevents cross-origin pages from sharing a browsing-context group with yours. This blocks cross-window references that enable Spectre-style timing attacks and tab-nabbing. Required if you want to enable SharedArrayBuffer.
Source: MDN / web.dev
COEP prevents loading cross-origin resources without explicit permission. Required for SharedArrayBuffer and high-resolution timers.
require-corpCOEP enforces that all embedded resources opt-in to cross-origin embedding — required for cross-origin isolation features.
Learn more ▾ ▴
Cross-Origin-Embedder-Policy: require-corp ensures every embedded resource (script, iframe, image) explicitly allows being loaded cross-origin. Combined with COOP, this enables the cross-origin-isolated context that unlocks SharedArrayBuffer, high-resolution timers, and other powerful APIs.
Source: MDN / web.dev
This header discloses server technology (e.g. Express, PHP), helping attackers target known vulnerabilities. Remove it.
X-Powered-By: PHP/7.4.3 advertises your stack to attackers — disable it.
Learn more ▾ ▴
X-Powered-By and similar headers (X-AspNet-Version, X-Runtime) tell attackers which versions to target. Disable in your server/framework config: PHP `expose_php=Off`, ASP.NET `<httpRuntime enableVersionHeader="false">`, Express `app.disable('x-powered-by')`.
Source: OWASP
FContent Security PolicyActionNo enforcing CSP policy foundFIX
CSP is the most effective defense against XSS attacks. Add a Content-Security-Policy header to restrict resource loading.
default-src 'self'Without a CSP, a single XSS bug can exfiltrate everything users type — credentials, payment data, session tokens.
Learn more ▾ ▴
Content-Security-Policy is the browser-enforced firewall against XSS. With a strict CSP, a script injection that would otherwise steal session cookies is silently blocked. Without it, your only defense is hoping every input on every form is escaped correctly forever. Start in Report-Only mode, fix violations, then graduate to enforcing.
Source: OWASP / MDN
FSubresource IntegrityAction0 of 119 external resources have SRIFIX
| Tag | Domain | Integrity |
|---|---|---|
| <link> | fonts.googleapis.com | ✗ Missing |
| <script> | st-a.cdp.asia | ✗ Missing |
| <script> | st-e.cdp.asia | ✗ Missing |
| <script> | a.cdp.asia | ✗ Missing |
| <script> | a.cdp.asia | ✗ Missing |
| <script> | cdnt.netcoresmartech.com | ✗ Missing |
| <script> | cdnt.netcoresmartech.com | ✗ Missing |
| <script> | cdnt.netcoresmartech.com | ✗ Missing |
| <script> | www.google-analytics.com | ✗ Missing |
| <script> | cdn.taboola.com | ✗ Missing |
| <script> | amplify.outbrain.com | ✗ Missing |
| <script> | j93557g.com | ✗ Missing |
| <script> | connect.facebook.net | ✗ Missing |
| <script> | connect.facebook.net | ✗ Missing |
| <script> | connect.facebook.net | ✗ Missing |
| <script> | connect.facebook.net | ✗ Missing |
| <script> | www.googletagmanager.com | ✗ Missing |
| <script> | scripts.clarity.ms | ✗ Missing |
| <script> | securepubads.g.doubleclick.net | ✗ Missing |
| <script> | buttons-config.sharethis.com | ✗ Missing |
| <script> | sb.scorecardresearch.com | ✗ Missing |
| <script> | www.googletagmanager.com | ✗ Missing |
| <script> | ads.pubmatic.com | ✗ Missing |
| <script> | static.chartbeat.com | ✗ Missing |
| <script> | st-a.cdp.asia | ✗ Missing |
| <script> | www.clarity.ms | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | fonts.googleapis.com | ✗ Missing |
| <link> | fonts.googleapis.com | ✗ Missing |
| <link> | fonts.googleapis.com | ✗ Missing |
| <link> | fonts.googleapis.com | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <script> | ajax.googleapis.com | ✗ Missing |
| <script> | cdnjs.cloudflare.com | ✗ Missing |
| <script> | cdnjs.cloudflare.com | ✗ Missing |
| <script> | cdnjs.cloudflare.com | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.jsdelivr.net | ✗ Missing |
| <script> | cdnjs.cloudflare.com | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | platform-api.sharethis.com | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <script> | static.chartbeat.com | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | osjs.netcoresmartech.com | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <script> | securepubads.g.doubleclick.net | ✗ Missing |
| <script> | assets.ubembed.com | ✗ Missing |
| <script> | fundingchoicesmessages.google.com | ✗ Missing |
| <script> | fundingchoicesmessages.google.com | ✗ Missing |
| <script> | st-media-template.antsomi.com | ✗ Missing |
| <script> | st-media-template.antsomi.com | ✗ Missing |
| <script> | st-media-template.antsomi.com | ✗ Missing |
| <script> | st-media-template.antsomi.com | ✗ Missing |
| <script> | st-media-template.antsomi.com | ✗ Missing |
| <link> | st-media-template.antsomi.com | ✗ Missing |
| <script> | st-media-template.antsomi.com | ✗ Missing |
| <script> | st-media-template.antsomi.com | ✗ Missing |
| <script> | st-media-template.antsomi.com | ✗ Missing |
| <script> | js.boxx.ai | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | s3.ap-southeast-1.amazonaws.com | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.jsdelivr.net | ✗ Missing |
| <script> | cdn.jsdelivr.net | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <link> | cdn.thestar.com.my | ✗ Missing |
| <link> | fonts.googleapis.com | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | www.queryly.com | ✗ Missing |
| <script> | cdn.thestar.com.my | ✗ Missing |
| <script> | tw.netcore.co.in | ✗ Missing |
| <script> | 52a360d4000447a08efd7617080680a9.js.ubembed.com | ✗ Missing |
DEmail SecurityActionDMARC: noneFIX
This only monitors, it doesn't block spoofed emails. Change to p=quarantine or p=reject.
DMARC p=none collects reports but doesn't actually block spoofed mail — phishing emails still reach inboxes.
Learn more ▾ ▴
DMARC's three policies are p=none (monitor only), p=quarantine (mark as spam), and p=reject (bounce). Most domains start at p=none to gather data, but stay there forever, leaving spoofers unblocked. After 30 days of clean DMARC reports, graduate to p=quarantine, then p=reject.
Source: DMARC.org / NIST
DPermissions-PolicyActionNo header setFIX
No Permissions-Policy header set.
Without this header, embedded iframes can request access to sensitive device features.
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=()
Dsecurity.txtActionNo /.well-known/security.txt publishedFIX
security.txt
No security.txt found at /.well-known/security.txt
BCORS ConfigurationNo CORS headersREVIEW
No CORS headers detected.
Cross-origin requests are blocked by browser same-origin policy.
Origin reflection test
Some servers mirror the request Origin header, which can be exploited. Test manually:
curl -sI -H "Origin: https://evil.com" <url> | grep -i access-control
CKnown vulnerability matchesAction21 known vulnerability match(es) against detected techREVIEW
Known Vulnerabilities
| Library | Version | Severity | Summary | Fixed In |
|---|---|---|---|---|
| Axios | 0.19.0 | medium | Axios NPM package 0.21.0 contains a Server-Side Request Forgery (SSRF) vulnerability | 0.21.1 |
| Axios | 0.19.0 | high | Axios is vulnerable to Inefficient Regular Expression Complexity | 0.21.2 |
| Axios | 0.19.0 | medium | Axios Cross-Site Request Forgery Vulnerability | 0.28.0 |
| Axios | 0.19.0 | high | axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL | 0.30.0 |
| Axios | 0.19.0 | high | ## Summary When Axios runs on Node.js and is given a URL with the `data:` scheme, it does not perform HTTP. Instead, its Node http adapter decodes the entire payload into memory (`Buffer`/`Blob`) and returns a synthetic 200 response. This path ignores `maxContentLength` / `maxBodyLength` (which only protect HTTP responses), so an attacker can supply a very large `data:` URI and cause the process to allocate unbounded memory and crash (DoS), even if the caller requested `responseType: 'stream'`. | 0.30.2 |
| Axios | 0.19.0 | high | # Denial of Service via **proto** Key in mergeConfig ### Summary The `mergeConfig` function in axios crashes with a TypeError when processing configuration objects containing `__proto__` as an own property. An attacker can trigger this by providing a malicious configuration object created via `JSON.parse()`, causing complete denial of service. ### Details The vulnerability exists in `lib/core/mergeConfig.js` at lines 98-101: ```javascript utils.forEach(Object.keys({ ...config1, ...config2 }), function computeConfigValue(prop) { const merge = mergeMap[prop] || mergeDeepProperties; const configValue = merge(config1[prop], config2[prop], prop); (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); }); ``` When `prop` is `'__proto__'`: 1. `JSON.parse('{"__proto__": {...}}')` creates an object with `__proto__` as an own enumerable property 2. `Object.keys()` includes `'__proto__'` in the iteration 3. `mergeMap['__proto__']` performs prototype chain lookup, returning `Object.prototype` (truthy object) 4. The expression `mergeMap[prop] || mergeDeepProperties` evaluates to `Object.prototype` 5. `Object.prototype(...)` throws `TypeError: merge is not a function` The `mergeConfig` function is called by: - `Axios._request()` at `lib/core/Axios.js:75` - `Axios.getUri()` at `lib/core/Axios.js:201` - All HTTP method shortcuts (`get`, `post`, etc.) at `lib/core/Axios.js:211,224` ### PoC ```javascript import axios from "axios"; const maliciousConfig = JSON.parse('{"__proto__": {"x": 1}}'); await axios.get("https://httpbin.org/get", maliciousConfig); ``` **Reproduction steps:** 1. Clone axios repository or `npm install axios` 2. Create file `poc.mjs` with the code above 3. Run: `node poc.mjs` 4. Observe the TypeError crash **Verified output (axios 1.13.4):** ``` TypeError: merge is not a function at computeConfigValue (lib/core/mergeConfig.js:100:25) at Object.forEach (lib/utils.js:280:10) at mergeConfig (lib/core/mergeConfig.js:98:9) ``` **Control tests performed:** | Test | Config | Result | |------|--------|--------| | Normal config | `{"timeout": 5000}` | SUCCESS | | Malicious config | `JSON.parse('{"__proto__": {"x": 1}}')` | **CRASH** | | Nested object | `{"headers": {"X-Test": "value"}}` | SUCCESS | **Attack scenario:** An application that accepts user input, parses it with `JSON.parse()`, and passes it to axios configuration will crash when receiving the payload `{"__proto__": {"x": 1}}`. ### Impact **Denial of Service** - Any application using axios that processes user-controlled JSON and passes it to axios configuration methods is vulnerable. The application will crash when processing the malicious payload. Affected environments: - Node.js servers using axios for HTTP requests - Any backend that passes parsed JSON to axios configuration This is NOT prototype pollution - the application crashes before any assignment occurs. | 0.30.3 |
| Axios | 0.19.0 | medium | Versions before 1.6.8 depends on follow-redirects before 1.15.6 which could leak the proxy authentication credentials | 1.6.8 |
| Bootstrap | 3.3.7 | medium | In Bootstrap before 3.4.0, XSS is possible in the tooltip data-viewport attribute. | 3.4.0 |
| Bootstrap | 3.3.7 | medium | XSS in data-container property of tooltip | 3.4.0 |
| Bootstrap | 3.3.7 | medium | In Bootstrap before 3.4.0, XSS is possible in the affix configuration target property. | 3.4.0 |
| Bootstrap | 3.3.7 | medium | XSS in data-target property of scrollspy | 3.4.0 |
| Bootstrap | 3.3.7 | medium | XSS in collapse data-parent attribute | 3.4.0 |
| Bootstrap | 3.3.7 | medium | XSS in data-container property of tooltip | 3.4.0 |
| Bootstrap | 3.3.7 | medium | XSS is possible in the data-target attribute. | 3.4.0 |
| Bootstrap | 3.3.7 | medium | Bootstrap Cross-Site Scripting (XSS) vulnerability for data-* attributes | 3.4.1 |
| Bootstrap | 3.3.7 | medium | XSS in data-template, data-content and data-title properties of tooltip/popover | 3.4.1 |
| Bootstrap | 3.3.7 | medium | Bootstrap Cross-Site Scripting (XSS) vulnerability for data-* attributes | 3.4.2 |
| Bootstrap | 3.3.7 | low | Bootstrap before 4.0.0 is end-of-life and no longer maintained. | 3.999.999 |
| Moment.js | 2.18.1 | high | Regular Expression Denial of Service (ReDoS) | 2.19.3 |
| Moment.js | 2.18.1 | high | This vulnerability impacts npm (server) users of moment.js, especially if user provided locale string, eg fr is directly used to switch moment locale. | 2.29.2 |
| Moment.js | 2.18.1 | high | Regular Expression Denial of Service (ReDoS), Affecting moment package, versions >=2.18.0 <2.29.4 | 2.29.4 |
BTransport SecurityHTTP/3, HSTS, and TLS version analysisREVIEW
A+TLS & CertificatesTLS 1.3, 7 checks passedPASS
HTTP/2 provides multiplexing and header compression for better performance.
HTTP/1.1 forces the browser to make sequential requests, multiplying latency on every page.
Learn more ▾ ▴
HTTP/2 (and HTTP/3) multiplex many requests over a single connection, eliminating head-of-line blocking. HTTP/1.1 forces the browser to either queue requests or open many parallel connections — both worse. Most modern web servers support HTTP/2 with one config line.
Source: MDN Web Docs
Certificate Chain
A+JS Library VulnerabilitiesNo known vulnerabilitiesPASS
No known JavaScript library vulnerabilities detected.
A+Information LeakageNo exposuresPASS
No sensitive files exposed — all paths returned 404.
| Path | Status | Category | Risk |
|---|---|---|---|
| /.git/HEAD | ✓ Not found | Version Control | — |
| /.git/config | ✓ Not found | Version Control | — |
| /.svn/entries | ✓ Not found | Version Control | — |
| /.env | ✓ Not found | Configuration | — |
| /.env.local | ✓ Not found | Configuration | — |
| /.env.production | ✓ Not found | Configuration | — |
| /wp-config.php | ✓ Not found | Configuration | — |
| /.htaccess | ✓ Not found | Configuration | — |
| /phpinfo.php | ✓ Not found | Debug | — |
| /server-status | ✓ Not found | Debug | — |
| /server-info | ✓ Not found | Debug | — |
| /.well-known/security.txt | ✓ Not found | Security Policy | — |