Skip to content
Protection & security

Your lessons are the business. Protect them like it.

Recorded courses get re-sold, re-uploaded and shared on one account by twelve students. TKDS LMS ships four independent video-protection layers, hard device limits, and a self-hosted CAPTCHA — every one of them a switch you control, not a bolt-on you pay extra for.

Last reviewed: August 2026

Moving watermark

The viewer’s own email drifts across the video. A leaked copy identifies whoever leaked it.

Capture deterrence

Blurs the moment focus leaves the window, and blocks right-click, Picture-in-Picture and download shortcuts.

Hidden video URLs

Blob-based playback keeps the real file address out of the DOM, so “copy video address” finds nothing.

Device limits

Cap concurrent logins per account — with separate caps for mobile and desktop. One password, one student.

Self-hosted CAPTCHA

TKDS CAPTCHA runs on our own servers. No Google, no third-party CDN, no visitor data leaving the platform.

Server-side permissions

Sub-admin roles are scoped per module and enforced on the server, not by hiding buttons in the interface.

Advanced video security — four independent switches

Piracy is not one problem, so it does not get one setting. Each layer below is toggled on its own from Settings → Security, because the right combination for a $30 recorded course is not the right combination for a live exam-prep cohort.

Moving watermark

A translucent overlay carrying the signed-in viewer’s email drifts continuously across the frame, so it cannot be cropped out of a screen recording or a phone video of the screen.

  • Viewer email, live
  • Moves — uncroppable
  • Survives re-encoding

Capture deterrence

The video blurs the instant the window loses focus — which is exactly when most capture tools take over — and the right-click menu, Picture-in-Picture and the browser’s save/download shortcuts are all blocked.

  • Blur on focus loss
  • No context menu
  • No PiP
  • Shortcuts blocked

Hidden URLs

Playback runs from a blob rather than a plain src, so the real media address never sits in the page markup for someone to copy into a downloader.

  • No src in the DOM
  • Blocks copy-address
  • Raises the effort bar

Chromeless YouTube

For courses hosted on YouTube, playback renders through youtube-nocookie with no logo, no title bar and no related videos — nothing that lets a student jump to the public YouTube page and lift the link.

  • No logo or title
  • No related videos
  • nocookie domain

The honest limit — read this before you buy anything

No browser-based protection stops a determined attacker with a phone camera or a hardware capture card. Anyone who tells you otherwise is selling. What these layers actually do is raise the effort far above casual sharing — and, critically, the watermark makes a leak attributable. Deterrence plus attribution is the realistic goal; “unrippable video” is not a thing.

Account sharing — the leak most academies actually lose money to

One student buys, twelve watch. It is the quietest revenue leak in online education, and it is not solved by video protection — it is solved by counting devices.

TKDS LMS caps how many devices can be signed into one account at the same time, and lets you set that cap three ways at once:

Account sharing — the leak most academies actually lose money to
SettingWhat it doesDefault

Total devices

Concurrent signed-in sessions across every device type. 0 = unlimited.

3

Mobile cap

An extra ceiling that applies only to phones and tablets.

Off

Desktop cap

An extra ceiling that applies only to computers.

Off

Evict oldest

On a login over the cap, sign out the oldest device automatically instead of blocking the new one.

On

Eviction happens per class, so a student who hits the mobile ceiling loses their oldest phone session, not the laptop they are mid-lesson on. And because the cap is a number you set, a family plan or a computer-lab account is a configuration change rather than a support ticket.

CAPTCHA, without handing Google your visitors

Bot signups, credential stuffing and spam through the contact form are the boring, constant attacks. TKDS LMS protects five forms — login, register, forgot-password, contact and complaints — behind one master switch, with a choice of provider:

Familiar

Google reCAPTCHA

The standard “I’m not a robot” checkbox. Well known to users, and free at ordinary volumes.

  • v2 checkbox
  • Zero setup cost
Self-hosted

TKDS CAPTCHA

Our own CAPTCHA server. An invisible proof-of-work challenge instead of image puzzles — no Google, no third-party CDN, and no visitor data leaving our infrastructure. Tokens are single-use.

  • No Google
  • No per-request fees
  • Invisible to users
  • Privacy-first

Why this matters more than it looks

A CAPTCHA is loaded on your busiest public pages. The usual one reports every visitor to a third party on every page load. Choosing the self-hosted option means your students’ browsing does not become someone else’s dataset — and it is a switch, not a migration.

Who gets in, and who can do what

Accounts authenticate against a bcrypt-hashed password and receive a Laravel Sanctum bearer token, revocable per device. Password reset uses a single-use, time-limited link, and expired tokens are pruned automatically rather than left to pile up.

On top of that, three admission gates can be switched on per install:

  • Student email verification — the account stays pending until the emailed link is opened.

  • Instructor registration mode — open (auto-approve), review (an admin approves each application, with a CV upload and a dedicated queue), or closed.

  • CAPTCHA on all five public forms, as above.

Authorisation is separate from authentication and lives on the server. Beyond the four seeded roles — Super Admin, Instructor, Student, Marketer — administrators create sub-admin roles with per-module permissions (admin.orders, admin.analytics, admin.withdrawals, and so on), enforced by middleware on the route groups. The interface also hides what you cannot use, but hiding is a courtesy: removing the button never removes the check.

Instructors are scoped to their own material — their own courses, students, media folders and uploads. Guardian accounts, when enabled, are read-only and require the student or an admin to accept the link first. There is no silent surveillance path into a student’s record.

Money, and why we never touch a card number

Card details go straight to the gateway — Stripe, PayPal, Fawaterk, Tabby or Tamara. Nothing card-related is stored, logged or proxied by the platform, which keeps the PCI burden where it belongs.

Gateway callbacks are verified server-side before they are trusted, so a forged return cannot mark an order paid.

Prices are always resolved from the database at checkout time. A tampered client payload cannot change what an order costs — including partial wallet payments, where the server decides how much balance applies and what the card must cover, and instalments, where each collection is booked independently.

Offline bank transfers require a receipt upload and an explicit admin approval before access is granted, with a rejection reason and a re-upload path rather than a dead end.

Uploads, media and the rest of the content

Uploads go through a staff-gated media endpoint. Images are re-encoded server-side — resized to ≤1600px and compressed to a hard 500 KB ceiling — which normalises every file and removes the surprises that come with accepting arbitrary binaries.

Instructors see only their own folders and uploads in the media library; admin file management sits behind its own module permission.

Direct messaging is gated by an explicit relationship rule — a follow edge in either direction, or an instructor and a student enrolled in their course. You cannot message a stranger. When real-time push is enabled, the websocket channel is private and authorised per conversation.

Live classes run on TKDS MEETING, self-hosted under your own domain. No third-party meeting provider sits between you and your students, and room access is authorised per join — which is also what produces the attendance record.

Privacy and data ownership

The academy owns its data. Students, orders, enrollments, grades, certificates and analytics all export to CSV from the admin panel at any time. There is no contractual clause that holds your content hostage, and no export fee.

We do not sell, rent or share student data, and we do not use it to train models.

Analytics and marketing tags (GA4, Google Tag Manager, Meta Pixel, custom snippets) are opt-in per install and controlled by the academy administrator — nothing is injected by default. Email marketing is SMTP-gated and dormant until an operator configures a mail server, so no message ever leaves under our name.

And because every feature is a switch that is off by default, a capability you do not use ships no routes, no menu items and no attack surface.

How we build and deploy

Configuration secrets are read through the config layer, never from the environment at runtime. That distinction matters more than it sounds: reading the environment directly returns empty once a production build caches its configuration — and a security control that fails open, silently, is worse than no control at all. We hit that exact bug, fixed it, and now have a test that fails if it comes back.

Every release ships with an automated backend test suite. The security-relevant behaviour — permission scoping, device eviction, entitlement revocation, tamper-safe pricing — has explicit tests rather than manual spot checks.

Paid add-on modules are entitlement-checked continuously. If a licence is revoked the module is removed from the install — pushed immediately, with a scheduled pull as a safety net — while its database tables are preserved, so restoring the licence restores the data intact.

What we have not built yet

This list is deliberate. Ask any vendor for theirs and watch what happens.

  • Two-factor authentication for admin and instructor accounts — designed, near-term backlog.

  • Audit log of privileged admin actions — planned alongside 2FA.

  • Automated off-site backups — currently the operator’s responsibility on self-hosted installs, documented in the deployment guide.

  • Encrypted-stream DRM (Widevine / FairPlay) — the four layers above are deterrence, not DRM. If you need studio-grade DRM, say so during onboarding and we will scope it.

  • SOC 2 / ISO 27001 certification — we hold neither. We will say so plainly rather than imply otherwise.

Reporting a vulnerability

Found something? Email security@tkdsmena.com with enough detail to reproduce it, and give us a reasonable window before disclosing publicly.

We acknowledge within two business days, tell you what we found, and let you know when the fix ships. There is no paid bounty programme yet, but we credit reporters who want the credit.

Please do not run automated scanners against a live customer academy, and do not access, modify or exfiltrate data that is not yours. Test against your own install.

security@tkdsmena.com

For anything sensitive, ask for a PGP key in your first message and we will send one before you share details.

Frequently asked

Does the watermark work on mobile and in the app?

Yes. The overlay is part of the player, so it renders wherever the lesson plays — web, mobile app and desktop app alike.

Will capture deterrence annoy honest students?

A little, which is why it is a switch. Blur-on-focus-loss is invisible to someone actually watching; it only bites when the window goes to the background. Many academies run watermark plus hidden URLs and leave the rest off.

Can I set a different device limit for one student?

The cap is per install today, not per account. If you need per-student exceptions — a computer lab, a family account — raise it at onboarding and we will tell you honestly whether it is configuration or a change request.

Where is the data hosted?

It depends on your plan. Managed academies run on our infrastructure in a region agreed at onboarding. Enterprise customers can deploy on their own infrastructure, including on-premise, in which case hosting, backups and network security are theirs to control and we support the deployment.

Is the platform GDPR-compatible?

The building blocks are there: data export, account deletion, opt-in analytics, no data sale, no model training. Full compliance also depends on how each academy operates — its privacy notice, lawful basis and retention policy — so we support it rather than claim it on your behalf. Enterprise customers can request a Data Processing Agreement.

Can staff see student passwords?

No. Passwords are stored as bcrypt hashes and are not recoverable by anyone, including us. An administrator can trigger a reset; nobody can read a password.

What happens if we stop paying?

You keep access to export your data. We do not lock an academy out of its own student list, orders or grades as a collection tactic.

Have a security questionnaire? Send it.

We answer what we can answer honestly, and we tell you plainly where the gaps are.