Security
The guardrails in the snippet, the headers and encryption behind Luria, the abuse controls, and what Luria does not claim.
The short version: Luria can change words and inline styling on specific elements of your pages, and only while its script is running. It cannot take payments, read card data, or edit your theme code.
What you'll need
Nothing. This page is a reference.
What the snippet can and cannot do
- Text and inline style, on named elements. That is the entire set of operations.
- It refuses any selector that would reach
html,head,body,*or:root, and it skips a change that would hit more than five elements. A change cannot blank your page. - It fails open. Any error, blocked request or bad response, and your page behaves exactly as if Luria were not installed.
- It loads asynchronously, and the anti-flicker hide is capped at 250 ms with a hard timeout that always reveals the page.
- It never edits your theme code. On Shopify, serving is the app embed: switch the embed off and Luria loads nothing.
- Kill switch: a paused site gets no changes, within about 60 seconds.
In transit and at rest
- HTTPS everywhere. HSTS is set for two years, includes subdomains, and is preload-ready.
- Shopify access and refresh tokens are encrypted with AES-256-GCM before they are stored. They are never rendered in a browser and never included in a data export.
- Visitor data is partitioned per site in the database.
Headers
Every Luria page carries a Content-Security-Policy, X-Content-Type-Options: nosniff, X-Frame-Options: DENY, a strict-origin-when-cross-origin referrer policy, a Permissions-Policy that switches off camera, microphone, geolocation, payment and USB, Cross-Origin-Opener-Policy: same-origin, and DNS prefetching off.
The one exception is the Luria app page inside Shopify admin, which is allowed to be framed by admin.shopify.com and your store admin, and by nothing else.
Abuse controls
- Every endpoint has a per-IP rate limit. Visitor telemetry and variant delivery are high but finite; the export endpoint allows five requests an hour and the delete endpoint three.
- Public forms sit behind a Cloudflare Turnstile check.
- The onboarding scanner only accepts public http and https hosts. A URL that resolves to a private, loopback or cloud-metadata address is refused, so Luria cannot be pointed at an internal network.
What Luria does not claim
Luria has no SOC 2 report, no ISO certification, no published penetration test, and no uptime commitment. If a vendor questionnaire asks, the honest answer is that none of those exist yet. When they do, they will appear on this page.
Reporting a problem
Email hello@luriart.com with what you found and how to reproduce it. There is no separate security address and no bug bounty.
Verify it worked
- Search your published theme files for "luria". On Shopify you should find nothing: Luria lives in the app embed, not in your code.
- Switch the app embed off and Save. Within about a minute, your storefront should stop requesting anything from luriart.com.
Common failures
- Your site's own CSP blocks Luria. If you set a Content-Security-Policy,
luriart.comhas to be allowed inscript-srcandconnect-src, or the snippet cannot load or report. See Snippet not firing. - An ad blocker blocks it. Blocked requests are fail-open, so the page still renders normally, but that browser produces no data.
- You need a completed security questionnaire. There is no standard package to send. Email hello@luriart.com with the questions.
Next steps
Deletion and the DPA
Export or delete your data from the Luria app, what Shopify's privacy webhooks remove, and how to get a signed Data Processing Addendum.
JavaScript events
The window.luria API (convert and exposure), the conversions Luria detects on its own, the events the snippet sends, and what the API does not include.