Zum Hauptinhalt springen
tsecurity.de LIVE
Echtzeit-Radar & Feeds
Alle RSS Feeds
👥 Community & Social
YouTube Security VideosAndroid Police: Samsung is smashing records! #shorts #tech #phones(21.09.2026 um 13:55 Uhr)
YouTube Security Videosheise & c't: Bundesnetzagentur wollte diesen Futterautomaten verbieten(21.09.2026 um 13:53 Uhr)
YouTube Security VideosNeil Patel: Your Google Traffic Isn't An Asset It's A Loan #shorts(21.09.2026 um 14:05 Uhr)
Windows Tipps & SecurityF-14 A Tomcat Top Gun endlich als Revell Klemmbausteinmodell erhältlich(21.09.2026 um 14:27 Uhr)
Sichere ProgrammierungShow the Hand-Back Sample Before Approving an Agent Score(21.09.2026 um 14:15 Uhr)
Sichere ProgrammierungHybrid retrieval in one Postgres query: RRF over tsvector + pgvector(21.09.2026 um 14:15 Uhr)
YouTube Security VideosAndroid Police: Samsung is smashing records! #shorts #tech #phones(21.09.2026 um 13:55 Uhr)
YouTube Security Videosheise & c't: Bundesnetzagentur wollte diesen Futterautomaten verbieten(21.09.2026 um 13:53 Uhr)
YouTube Security VideosNeil Patel: Your Google Traffic Isn't An Asset It's A Loan #shorts(21.09.2026 um 14:05 Uhr)
Windows Tipps & SecurityF-14 A Tomcat Top Gun endlich als Revell Klemmbausteinmodell erhältlich(21.09.2026 um 14:27 Uhr)
Sichere ProgrammierungShow the Hand-Back Sample Before Approving an Agent Score(21.09.2026 um 14:15 Uhr)
Sichere ProgrammierungHybrid retrieval in one Postgres query: RRF over tsvector + pgvector(21.09.2026 um 14:15 Uhr)
Intelligence View
⚡ tsecurity.de Intelligence

Four things that surprised me running Python in the browser

I built a debugging-practice site where student code runs entirely in the browser. Python via Pyodide, JavaScript in a worker. No server executes anything. No execution bill, no queue, no sandbox to maintain. But four things bit me…

0
↗ Quelle (dev.to)
Reagiere als Erste:r — dein Feedback zählt!

I built a debugging-practice site where student code runs entirely in the

browser
. Python via Pyodide, JavaScript in a worker. No

server executes anything.



No execution bill, no queue, no sandbox to maintain. But four things bit me hard.







1. Your arguments aren't Python objects



Pass a JS object into Python and you get this:




TypeError: 'pyodide.ffi.JsProxy' object is not subscriptable






It's not a dict. It's a live view of the JS object, and it supports neither

obj[key] nor .get().



Convert explicitly:




const pyArgs = input.map((arg) => pyodide.toPy(arg));
const result = fn(...pyArgs);












2. null is not None



This one passed my entire test suite while being broken in production.




pyodide.toPy(null)































check result
type(v) JsNull
bool(v) False ✅ falsy, as expected
v is None False ❌ the surprise


It's falsy, so truthiness checks work fine. But is None fails — which was

exactly what my code was checking.



Why my tests missed it: the harness used json.loads. The app used toPy.

Different conversion paths, different answers.



If you need a real None, create it in Python. Don't pass one across.







3. sys.settrace is a free step debugger



Want to show users their code running line by line? Python basically hands it to you:




def _tracer(frame, event, arg):
if frame.f_code.co_name != target:
return None # skip library frames
if event == "line":
steps.append({
"line": frame.f_lineno,
"locals": dict(frame.f_locals),
})
return _tracer






Two things this naive version gets wrong:





  • Add a step cap. A tight loop generates steps faster than it burns a 5-second
    timeout. You need both guards.


  • Handle exception. During unwinding, the return event still fires with
    arg=None. Miss it and your trace says "returned None" for code that crashed.









4. Your snapshots are lying



A user screenshot exposed this one.



Every step in the trace showed the final state of a list. Step 1 included

mutations that hadn't happened yet.




  tracing:  nums = []; nums.append(1); nums.append(2)

- what the trace showed + what actually happened
- step 1 nums = [1, 2] + step 1 nums = []
- step 2 nums = [1, 2] + step 2 nums = [1]
- step 3 nums = [1, 2] + step 3 nums = [1, 2]






frame.f_locals gives you references. Snapshot a list and you've stored a

pointer to something the program keeps mutating.




# copy at capture time
return json.loads(json.dumps(value))







Any time you snapshot mutable state over time, you're one reference away from

a history that rewrites itself.










Worth it?



Yes. Zero execution cost, scales infinitely, works on a locked-down lab machine

with nothing installed.



But test against the real runtime. Every bug above was found by running the

actual thing — not by unit tests around it. The JsNull one passed a fully green

suite.






Built for BugHunt — free debugging practice,

runs in your browser, no account needed.

Zum Aktualisieren ziehen
ZERO-DAY CVE-2026-94097 | A vulnerability was determined in Netcore NBR200V2 1.3.241127.071246. Th…
Advisory →
TTS Reader • tsecurity.de Voice
tsecurity.de Icon
tsecurity.de App
Offline-Lesen, Eilmeldungen & 0ms Ladezeit

Installiere tsecurity.de direkt auf deinen Home-Bildschirm für das ultimative Vollbild-Magazinerlebnis ohne Browser-Leisten.

Nächster Beitrag
Themen-Radar & Intelligence Matrix
Echtzeit-Taxonomie nach Angriffsvektoren & Plattformen

tsecurity.de Live Threat Radar

🔴 LIVE RADAR
MONITORING
AKTIV
CVE-DATENBANK
LIVE
🔍
Community Radar & Live Chat
Sentinel Bot online • Live-Stream
Dein Cluster: Security Explorer
Match:
lädt…
Verbindung zum Community-Stream wird aufgebaut...
Bearbeitungsmodus — Senden überschreibt deine Nachricht
Community-Puls — was gerade passiert
lädt…
Aktivitäten deiner Analysten
lädt…
Neues Thema oder Eilmeldung einreichen

Reiche interessante Links, Zero-Days oder Debatten ein. Die Community entscheidet per Upvote über die Veröffentlichung.

Heiß diskutierte Einreichungen
🔖 Gespeicherte Artikel
📂 Keine gespeicherten Artikel vorhanden.
Zurück Ziehen Vor
Links: vorheriger Artikel Rechts: nächster Artikel unten: schließen
News NIS-2 Frühwarnung Tier-1 Intel ⏱️ 3 Min vor 10 Min
Artikeldaten werden geladen...

Zurück: vorheriger Vor: nächster
↗ Original-Quelle
Social Reaktionen Deine Reaktion zählt
Einstufung & Relevanz-Poll 0 Stimmen
In sozialen Netzwerken teilen 1-Klick