Back to results

Digital exposure report

harvard.edu

High exposure. Significant weaknesses put the brand, customers and email at risk.

Scanned: 2026-11-15 19:22 UTC

Full coverage: every applicable check was assessed.

D
61/100

What to do first

  1. 1.

    Tell browsers to always use the secure version

    Helps browsers use HTTPS on future visits after they have received the policy.

    Who can fix it: Your web host

    How to verify after the fix

    curl -sIL https://harvard.edu/ | grep -i "Strict-Transport-Security"
  2. 2.

    Limit what scripts your pages are allowed to run

    This adds one layer of protection against injected scripts.

    Who can fix it: Your website developer or web host

    How to verify after the fix

    curl -sIL https://harvard.edu/ | grep -i "Content-Security-Policy"

A starting point, not a security guarantee.

What this grade means

Tested hostname
harvard.edu
Website request
GET https://harvard.edu/ → https://www.harvard.edu/
Scan time
2026-11-15 19:22:43 UTC
Grading method
Version 2How grading works
Unverified or excluded checks
None. Every applicable check was assessed.

This is a snapshot of the public configuration checks listed in this report. It does not verify the site's owner, business legitimacy, application security, or absence of vulnerabilities. It is not a security certification.

Score by category

Email security26/30Spoofing email from this domain is hard.
Encryption & certificate25/25Traffic to the site is encrypted and the certificate is valid.
Browser protections0/30Several browser hardening headers are missing, which removes layers of protection against script injection and framing.
DNS infrastructure10/15The domain's infrastructure works, but recommended hardening is missing.

Fix priorities

  1. 1.HighHSTS — enforce encryption in the browser · Hardening gap+8
  2. 2.MediumClickjacking protection · Hardening gap+5
  3. 3.MediumCSP — protection from script injection · Hardening gap+8
  4. 4.LowCAA — who may issue certificates · Hardening gap+5
  5. 5.LowX-Content-Type-Options · Hardening gap+4
  6. 6.LowDMARC — anti-spoofing policy · Hardening gap+3
  7. 7.LowReferrer-Policy · Hardening gap+3
  8. 8.LowPermissions-Policy · Hardening gap+2

Findings

SPF — who may send mail for the domain

Passed · Severity: OK · 9/10

An authorized sender list is defined; mail from other servers is flagged as suspicious.

~all (softfail) — acceptable when combined with enforced DMARC. 2 of 10 DNS lookups.

Source data: DNS TXT harvard.edu
v=spf1 include:%{i}._ip.%{h}._ehlo.%{d}._spf.vali.email include:spf.mailjet.com ~all
$ dig +short TXT harvard.edu
Documentation: RFC 7208 — SPF (https://www.rfc-editor.org/rfc/rfc7208) · M3AAWG — Email Authentication Best Practices (https://www.m3aawg.org/sites/default/files/m3aawg-email-authentication-recommended-best-practices-09-2020.pdf)

DMARC — anti-spoofing policy

Needs attention · Severity: Low · Hardening gap · 12/15

Forged email in the company's name is sent to the spam folder.

Policy p=quarantine. p=quarantine — consider moving to p=reject. sp=none — subdomains are exposed to spoofing.

Source data: DNS TXT _dmarc.harvard.edu
v=DMARC1; p=quarantine; sp=none; pct=100; adkim=r; aspf=r; rua=mailto:dmarc_agg@vali.email
$ dig +short TXT _dmarc.harvard.edu
Fix recommendation (effort: Easy)
  1. Keep your current p=quarantine enforcement and edit the existing record in place — do not replace it with p=none.
  2. Set sp to match p so subdomains get the same enforcement.
  3. Optional: once reports show all legitimate senders pass, move from p=quarantine to p=reject.
_dmarc.harvard.edu.  TXT  "v=DMARC1; p=quarantine; sp=quarantine; pct=100; adkim=r; aspf=r; rua=mailto:dmarc_agg@vali.email"

Safety: DNS changes are made only at your DNS provider. This tool only reads public data and changes nothing on the domain. Your domain already enforces DMARC. Edit the record in place; never roll back to p=none.

Documentation: RFC 7489 — DMARC (https://www.rfc-editor.org/rfc/rfc7489) · dmarc.org — FAQ (https://dmarc.org/resources/frequently-asked-questions/)

DKIM — digital signature on email

Passed · Severity: OK · 5/5

A DKIM public key is published. On its own this doesn't prove outgoing mail is signed or aligned with your From domain.

DKIM public key found for selector: selector1, default, k1, s1, s2. Confirm signing with dkim=pass in a sent message's Authentication-Results.

Source data: DNS TXT <selector>._domainkey.harvard.edu
selector1._domainkey: v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnDy0wsbQs4P4qqGLE1ywGIUokfUP…
default._domainkey: v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc2l1ozDhNKU/uIMrWwyD5sKFbyzHg8ZPE…
k1._domainkey: k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbNrX2cY/GUKIFx2G/1I00ftdAj713WP9AQ1xir85i8…
s1._domainkey: k=rsa; t=s; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1CJ6+q+N264DhEGxi92ISXCkZT+f06yc…
s2._domainkey: k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTUzQVpQ1SATUnikEo0S3AEJl3+2Q5ygaEhH44…
$ dig +short TXT selector1._domainkey.harvard.edu
Documentation: RFC 6376 — DKIM (https://www.rfc-editor.org/rfc/rfc6376) · M3AAWG — Email Authentication Best Practices (https://www.m3aawg.org/sites/default/files/m3aawg-email-authentication-recommended-best-practices-09-2020.pdf)

MX — inbound mail routing

Passed · Severity: OK · unscored

Mail exchangers are published for the domain.

2 MX record(s). This shows where inbound mail is routed, not whether mail is sent from the domain.

Source data: DNS MX harvard.edu
100 mx0a-00171101.pphosted.com
100 mx0b-00171101.pphosted.com
$ dig +short MX harvard.edu
Documentation: RFC 7505 — Null MX (https://www.rfc-editor.org/rfc/rfc7505) · RFC 5321 §5.1 — Locating the target host (https://www.rfc-editor.org/rfc/rfc5321#section-5.1)

HTTPS available

Passed · Severity: OK · 10/10

The site loads over an encrypted connection.

https://harvard.edu/ returned HTTP 200 (final URL: https://www.harvard.edu/). Client-side certificate validation passed.

Source data: HTTPS GET https://harvard.edu/
HTTP 200
Final URL: https://www.harvard.edu/
$ curl -sIL https://harvard.edu/
Documentation: OWASP — Transport Layer Security Cheat Sheet (https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Security_Cheat_Sheet.html) · Mozilla — Server Side TLS (https://wiki.mozilla.org/Security/Server_Side_TLS)

HTTP → HTTPS redirect

Passed · Severity: OK · 7/7

Visitors arriving at an unencrypted address are automatically sent to the secure version.

HTTP 301 → https://harvard.edu/

Source data: HTTP GET http://harvard.edu/ (redirects not followed)
HTTP 301
Location: https://harvard.edu/
$ curl -sI http://harvard.edu/ | grep -iE "^(HTTP|location)"
Documentation: OWASP — Transport Layer Security Cheat Sheet (https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Security_Cheat_Sheet.html) · RFC 6797 — HSTS (https://www.rfc-editor.org/rfc/rfc6797)

SSL/TLS certificate validity

Passed · Severity: OK · 8/8

The certificate was accepted by a validating TLS client at scan time.

Live TLS handshake succeeded. Latest issuance in CT logs: Sectigo, expiring 2027-03-08 (113 days). CT shows issued certificates, not necessarily the one served — confirm dates with the verify command.

Source data: Certificate Transparency logs (certspotter) for harvard.edu
Live TLS handshake: certificate accepted
CT logs (context only, not scored):
Issuer: Sectigo
Valid from: 2026-02-05
Valid until: 2027-03-08
Names: harvard.edu
Based on Certificate Transparency logs; may not reflect the certificate currently served.
$ echo | openssl s_client -connect harvard.edu:443 -servername harvard.edu 2>/dev/null | openssl x509 -noout -issuer -dates
Documentation: Certificate Transparency (https://certificate.transparency.dev/) · Let's Encrypt — Docs (https://letsencrypt.org/docs/) · Mozilla — Server Side TLS (https://wiki.mozilla.org/Security/Server_Side_TLS)

HSTS — enforce encryption in the browser

Failed · Severity: High · Hardening gap · 0/8

Browsers aren't told to always use an encrypted connection, enabling interception attacks on public networks.

No Strict-Transport-Security header. Users are exposed to SSL stripping on the first request.

Source data: Response headers from https://www.harvard.edu/
Strict-Transport-Security: (missing)
$ curl -sIL https://harvard.edu/ | grep -i "Strict-Transport-Security"
Fix recommendation (effort: Easy)
  1. Start with a short max-age (300 seconds) and make sure every subdomain works over HTTPS.
  2. Gradually raise it to 31536000 (one year) and add includeSubDomains.
  3. Consider preload only once the policy is stable — removal from the preload list is slow.
/*
  Strict-Transport-Security: max-age=31536000; includeSubDomains

Safety: This change is made in your server/CDN settings. Test on staging before production. HSTS is cached in the visitor's browser — a long max-age on a site without working HTTPS will block access.

Documentation: MDN — Strict-Transport-Security (https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security) · RFC 6797 — HSTS (https://www.rfc-editor.org/rfc/rfc6797) · OWASP — HTTP Headers Cheat Sheet (https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html)

CSP — protection from script injection

Failed · Severity: Medium · Hardening gap · 0/8

Missing Content-Security-Policy header: this removes one layer of protection against script injection.

No Content-Security-Policy header found.

Source data: Response headers from https://www.harvard.edu/
Content-Security-Policy: (missing)
$ curl -sIL https://harvard.edu/ | grep -i "Content-Security-Policy"
Fix recommendation (effort: Complex)
  1. First publish Content-Security-Policy-Report-Only — it blocks nothing, it only reports.
  2. Collect violations for a week or two and tune the policy to your legitimate sources.
  3. Switch to the Content-Security-Policy header and replace 'unsafe-inline' with a nonce or hash.
/*
  Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'

Safety: This change is made in your server/CDN settings. Test on staging before production. An overly strict CSP will break scripts — that's why you start in Report-Only mode.

Documentation: MDN — Content Security Policy (https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP) · OWASP — CSP Cheat Sheet (https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html)

Clickjacking protection

Failed · Severity: Medium · Hardening gap · 0/5

Missing X-Frame-Options / frame-ancestors: this removes one layer of protection against clickjacking.

No valid X-Frame-Options and no frame-ancestors in the CSP.

Source data: Response headers from https://www.harvard.edu/
X-Frame-Options: (missing)
$ curl -sIL https://harvard.edu/ | grep -i "X-Frame-Options"
Fix recommendation (effort: Easy)
  1. Add X-Frame-Options: SAMEORIGIN (or DENY if the site is never embedded anywhere).
  2. Also set frame-ancestors in the CSP — the modern alternative.
/*
  X-Frame-Options: SAMEORIGIN

Safety: This change is made in your server/CDN settings. Test on staging before production. If partners embed the site in an iframe, add them to frame-ancestors instead of using DENY.

Documentation: MDN — X-Frame-Options (https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Frame-Options) · OWASP — Clickjacking Defense (https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html)

X-Content-Type-Options

Failed · Severity: Low · Hardening gap · 0/4

The browser may interpret files as code unintentionally.

Missing X-Content-Type-Options: nosniff header (MIME sniffing).

Source data: Response headers from https://www.harvard.edu/
X-Content-Type-Options: (missing)
$ curl -sIL https://harvard.edu/ | grep -i "X-Content-Type-Options"
Fix recommendation (effort: Easy)
  1. Add X-Content-Type-Options: nosniff to every response.
/*
  X-Content-Type-Options: nosniff

Safety: This change is made in your server/CDN settings. Test on staging before production.

Documentation: MDN — X-Content-Type-Options (https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Content-Type-Options) · OWASP — HTTP Headers Cheat Sheet (https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html)

Referrer-Policy

Failed · Severity: Low · Hardening gap · 0/3

Internal URLs (including parameters) may leak to external sites.

Referrer-Policy is missing; the browser will use its default.

Source data: Response headers from https://www.harvard.edu/
Referrer-Policy: (missing)
$ curl -sIL https://harvard.edu/ | grep -i "Referrer-Policy"
Fix recommendation (effort: Easy)
  1. Set Referrer-Policy: strict-origin-when-cross-origin.
/*
  Referrer-Policy: strict-origin-when-cross-origin

Safety: This change is made in your server/CDN settings. Test on staging before production.

Documentation: MDN — Referrer-Policy (https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Referrer-Policy) · OWASP — HTTP Headers Cheat Sheet (https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html)

Permissions-Policy

Needs attention · Severity: Low · Hardening gap · 0/2

Access to sensitive features like the camera and location isn't restricted.

Missing Permissions-Policy header.

Source data: Response headers from https://www.harvard.edu/
Permissions-Policy: (missing)
$ curl -sIL https://harvard.edu/ | grep -i "Permissions-Policy"
Fix recommendation (effort: Easy)
  1. Disable browser features the site doesn't need (camera, microphone, geolocation).
/*
  Permissions-Policy: camera=(), microphone=(), geolocation=()

Safety: This change is made in your server/CDN settings. Test on staging before production. Don't disable a feature the site actually uses.

Documentation: MDN — Permissions-Policy (https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Permissions-Policy) · OWASP — HTTP Headers Cheat Sheet (https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html)

Software version disclosure

Passed · Severity: OK · unscored

The server doesn't disclose software versions.

No version numbers found in the Server / X-Powered-By headers.

Source data: Response headers from https://www.harvard.edu/
server: cloudflare
x-powered-by: (missing)
$ curl -sIL https://harvard.edu/ | grep -iE "^(server|x-powered-by)"
Documentation: OWASP — HTTP Headers Cheat Sheet (https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html)

DNSSEC — signed DNS records

Passed · Severity: OK · 7/7

The domain's records are digitally signed and hard to forge.

An AD (Authenticated Data) flag was returned by a validating resolver.

Source data: DNS-over-HTTPS (Cloudflare / Google): AD flag and DS record at the parent
AD = true
$ dig +dnssec harvard.edu | grep -E "flags:.* ad"
Documentation: RFC 4033 — DNSSEC (https://www.rfc-editor.org/rfc/rfc4033) · ICANN — DNSSEC: what and why (https://www.icann.org/resources/pages/dnssec-what-is-it-why-important-2019-03-05-en)

CAA — who may issue certificates

Needs attention · Severity: Low · Hardening gap · 0/5

Any certificate authority can issue a certificate for the domain, raising the risk of mis-issuance.

No CAA records found. RFC 8659 lets the domain owner restrict which CAs are authorized.

Source data: DNS CAA harvard.edu
(no CAA records found)
$ dig +short CAA harvard.edu
Fix recommendation (effort: Easy)
  1. Identify which certificate authority issued your current certificate (see the certificate check).
  2. Publish CAA for that authority only, and add iodef to receive alerts.
harvard.edu.  CAA  0 issue "letsencrypt.org"
harvard.edu.  CAA  0 iodef "mailto:security@harvard.edu"

Safety: DNS changes are made only at your DNS provider. This tool only reads public data and changes nothing on the domain. If your CDN issues certificates on your behalf, include it too — otherwise certificate renewal will fail.

Documentation: RFC 8659 — CAA (https://www.rfc-editor.org/rfc/rfc8659)

DNS server redundancy

Passed · Severity: OK · 3/3

The domain is served by several DNS servers, so one server failing won't take it down.

6 NS servers.

Source data: DNS NS harvard.edu
a6-66.akam.net
a7-65.akam.net
a1-171.akam.net
a10-66.akam.net
a11-67.akam.net
a16-64.akam.net
$ dig +short NS harvard.edu
Documentation: RFC 2182 — Secondary DNS server operation (https://www.rfc-editor.org/rfc/rfc2182)

Indicative alignment

Best-practice mapping of public findings to common frameworks. Passive scanning tests public configuration only; it doesn't prove compliance or a violation.

  • Google & Yahoo sender rules1 observed gaps
  • PCI DSS v4.03 observed gaps
  • NIS2 / vendor due diligence3 observed gaps
  • SOC 2 / ISO 27001 baseline5 observed gaps

Indicative alignment only, based on public configuration. It doesn't establish whether a framework applies to you, and it isn't legal advice, an audit or a certification.

Public DNS records

Aharvard.edu192.0.66.20
AAAAharvard.edu—
MXharvard.edu100 mx0a-00171101.pphosted.com | 100 mx0b-00171101.pphosted.com
NSharvard.edua6-66.akam.net | a7-65.akam.net | a1-171.akam.net | a10-66.akam.net | a11-67.akam.net | a16-64.akam.net
TXTharvard.eduMS=ms35192554 | _hyz89h4dzuordjnlhz6kkyujqcd9smf | brevo-code:30d9f789747b4c124f72dabf24a0a97f | status-page-domain-verification=b4j4g69th3vv | status-page-domain-verification=p83gt91wpxms | fastly-domain-delgation-vdnblsdg768nm-21052021 | airtable-verification=8b8110e9283dd87d57b3c5f2f5af2db1 | airtable-verification=a92cef30671587a4f6deb7951c1c3f1a | airtable-verification=b25f432db3cbc5bfc481914364b6ce41 | openai-domain-verification=dv-5z82SztO32q9YBNgFooNBz5v | openai-domain-verification=dv-e8vYSnmmPbWxpNte1iIKgvOO | geneious.com:domain-verification=1781B6exIEsRBzJ0KzPtKg | cloudflare_dashboard_sso=ef2b950ccd264aba96ddef41e3cf3475 | smartsheet-site-validation=jfLh_IkQNJXuKKpTn7RydwiiaAOLy4CR | anthropic-domain-verification-dprfjc=K9LyiFV7zLafnNLNO4lFjyaRx | anthropic-domain-verification-gy5zhc=zmrGT2kyyc2HlnUn6f0utkQB6 | globalsign-domain-verification=1C94E0FFAAE95796F597427644D90C03 | globalsign-domain-verification=1DDF777ED1ADF45E5FFAFFAAD6774180 | globalsign-domain-verification=5A1F4E0081852ECB9015E837384121AD | globalsign-domain-verification=87677a19ae97bfbeec25ff1510a80420 | globalsign-domain-verification=9ff12eafbeebb02a0f2b0383aef9d1fa | globalsign-domain-verification=B8359DCEFBCF837B95E2F82282E4297A | globalsign-domain-verification=C44DEEAC45AB4DC2B5AD0B9B2E5D5803 | globalsign-domain-verification=dcc2e5d0d67efc32044ae679c7cf19e6 | google-site-verification=DZTZhbBaYJ6AO5j-tHFYBdkwryNywFh2gMUeg3SRDSg | google-site-verification=DzhZyP8pu0M1-RFghfTcSN-9poidboYRNdfn2Rf2hCQ | google-site-verification=MmfJS0BjLRgcxrlj8kAyNdToKeAmj0fKb-lPOnd5Pmo | google-site-verification=NEWpTHNZnWRWN3trkIMeFbuPVG3ExwOXUHlC9aJ2sks | google-site-verification=lY-T8NneGQX1RGXeaoBJjSmT_lx3dLRKDq1xY44ZI5w | google-site-verification=pWvLuNePLYxAbafZw2a95vnBhvcj12DzM9NulT9ujSY | google-site-verification=xXWxVElKH8ek_eW45CbAqVSMTQgAqLYUNQUrWpOmkrY | google-site-verification=xqg8LPF_v_QMEIST789q8xhRDqUEX4_8lQjAvV6YykY | heroku-domain-verification=1qfmzz9vp3kexf4fr5zuliwvpieih2ffz4gexo7tlh4 | mgverify=45e7fcf3ed36156afa50e8dd90aa36e82af6f11b95e35537b03ecebd434b328a | pardot378242=7001579db574e062735763ba81b54da111abc31facf16bbfa653ab6b8a770988 | pardot679353=3cc5e124c5020a1e160f01981f45be33a467a1c802711e0e5654184ef56d18c9 | pardot679353=f93ea3588d69483bf48dbf587511f51d43ddadaae52b8bac6856c8428559a06d | pardot962443=9098884472c5cb29a2e20700b41411cb4aa5ebcf340360e71b2cd8464d8864b6 | pardot_378242_*=8b485d5cd9114869cff8f307da5fa9287434ebec11621d88c07ce97a7fee06e0 | v=spf1 include:%{i}._ip.%{h}._ehlo.%{d}._spf.vali.email include:spf.mailjet.com ~all | Peh2GHoW8uiAzwS9tTZKlGBn9cMq6Y+XUFtrqmLtqFh1WvloPkzGczPsZcSdDfin4hZ7QiL9J7SM8yr7Yyzi8w== | jAykGnWytyLeBseMa8x2/MBve6/yQqana4yrAc1ROoei7uZHUkM2FU0Xx4qI/rm+kOGdImZdoq0fdodgLEw1dg== | xIGeuA0e5B1BOjTE4IBO806ziFX9G1m2dVJ8zO7CMkmKwZ6MEkMXC0P7n5SRCGOdS9jbceH/7gKYgD4h9FBGKA== | ciscocidomainverification=41ce9827e3fbbca9ce75d5dbb5a6bc7b089dc4e239c1b56ba828216d1214480 | adobe-idp-site-verification=66e813947c764d98330002232f383a68df8ad609065abb9482f3805dd2a1902c | atlassian-domain-verification=ASRKBXyOafZgDCRWh1Ylv34hiOSMgAIoNXs8H57rR3aTkuOD5KwJfUN9G3f7Ah/H | atlassian-domain-verification=OYfkFwspEELRW6A32BsDVWgvdz8/pLBxVcq7s/mHLBVGqRQRG58XA5LRtDAGpfA7 | atlassian-domain-verification=Z8oUd5brL6/RGUMCkxs4U0P/RyhpiNJEIVx9HXJLr3uqEQ1eDmTnj1eq1ObCgY1i
TXT_dmarc.harvard.eduv=DMARC1; p=quarantine; sp=none; pct=100; adkim=r; aspf=r; rua=mailto:dmarc_agg@vali.email
CAAharvard.edu—
DSharvard.edu23262 13 2 715cbed751ded62ec74d446c91bbe30deb6b09b03b2d66a512247e0e43d755cb
Passive check only: reading public DNS records, Certificate Transparency logs and ordinary GET requests to the homepage over HTTPS and HTTP. No changes were made to the scanned domain. Results are an indication and do not replace a professional security assessment.

Check your own domain