Sjoerd Langkemper
Web application security
- Posts
- 176 from 31 Jul 2003 to 28 Oct 2026
- Posting
- now and then (5 in the last year)
- Kind
- personal blog
- Feed
- http://www.sjoerdlangkemper.nl/feed.xml
2026 4
2025 5
2024 16
- More links
- Avoid hotlinking images with Cross-Origin-Resource-Policy
- Amplification for compression attacks
- If you don't want to solve a captcha, simply don't request one
- Removing and encoding null bytes to exploit unserialize over SOAP
- Parsing untrusted JSON in Python is not a security problem
- Links
- Book review: The Seven Husbands of Evelyn Hugo
- HTMX does not play well with content security policy
- Seed of random number generator carried across connections in MariaDB
- String comparison timing attacks
- Twig retrieves each attribute twice on Eloquent models
- Create objects instead of strings
- Curl facilitates header injection
- Session poisoning Zen Cart for a free discount
- MySQL's random number generator
2023 17
- A practical attack on Hashids
- Securing HTML fragments returned by API endpoints
- I made a client-side spamfilter for Tutanota email
- Tweakable block ciphers
- Origin header in password reset email
- Block ciphers with a 64 bit block size
- Short session expiration does not help security
- encrypting identifiers
- previous post
- My experience with organizing a giving game
- MIME type sniffing and the X-Content-Type-Options: nosniff header
- IP spoofing and SQL injection in Textcube
- Cookie prefixes turn security problems into functional problems
- XSS in ViewVC
- Should 2FA secrets be encrypted?
- Mark sensitive information as such in the source code
- Clever ORM causes password reset vulnerability
2022 6
- Running Etherkey on an ATmega32u4 to emulate a keyboard
- Enforcing object lifecycles through interfaces
- Avoid passing secrets in build arguments in Docker
- MCH 2022 hacker camp - personal anecdotes
- MCH 2022 hacker camp - technical talks and workshops
- Lucky 13 and other padding oracle attacks on CBC ciphers
2021 5
- Git submodules update to default branch, except when it's changed
- How does git diff --ignore-matching-lines work
- Long passwords don't cause denial of service when using proper hash functions
- Remote code execution through unsafe unserialize in PHP
- Adding request headers to image requests using a service worker
2020 16
- IoT security regulation
- Comparison of IoT security frameworks
- The most important security problems with IoT devices
- Essential requirements for securing IoT consumer devices
- Infinite loop leads to denial of service in Centreon
- Overwriting HttpOnly cookies using cookie jar overflow
- Testing Android apps on a virtual machine
- Combine two word lists for cracking passwords
- Abusing javascript:history.back() as an open redirect
- The struggle of perfectionism
- Bypass virus scanners by renaming files
- How to open a Compal CH7465LG-ZG Ziggo Connect Box
- The case for client-side hashing: logging passwords by mistake
- Grepping functions with srcML
- Cracking password hashes in Yclas
- Matrix.org hack
2019 29
- Should each form have a different CSRF token?
- XSS in username in Sakai
- Breaking message franking
- Most commonly used Dutch passwords
- A cheap alternative for Mictor 38 debugging connectors
- Reflected XSS in Yclas
- Second order SQL injection in ZoneMinder
- My pen testing project setup
- Insecure direct object reference in Growatt
- How to survive an office job
- A method to do TLS on IoT devices
- Learning how to be a pentester
- Command injection on CommonAccord
- Attacking RSA keys
- Open redirect in CrushFTP
- Logging DNS requests with internet sharing on macOS
- ENISA Technical Measures for IoT
- Working with bits and bytes in Python 2 and 3
- Quickly set up a test mail server
- Hacking the Motorola MBP88Connect WiFi camera
- USB to UART serial bridges
- Coverage of a security assessment
- Prevent CSRF with the Origin request header
- A USB Wi-Fi adapter that works with MacOS Mojave
- Securing against cyber-attacks
- Impact of cyberattack
- probability
- CSRF protection
- Accessing cross-site data using JSONP
2018 23
- Practice your hacking skills with these CTFs
- Take over sessions in Metasfresh using CORS
- Should you update jQuery over a hypothetical vulnerability?
- Truncating strings with MySQL
- Creating custom word lists for password cracking
- Which CORS headers do you need to send an Authorization header?
- Changing your password through CSRF in IceHRM
- Automating path traversal with protravel
- Path traversal in Monstra CMS
- PHP type confusion on password comparison
- Discovering subdomains
- Vulnerability bingo
- Finding common files in the webroot
- Detecting postMessage interfaces
- bit flip
- Grepping functions with ANTLR
- Intercepting HTTP requests with mitmproxy
- Hacking the Huawei HG655d
- Experiences with the CC2530 Zigbee IC
- Ubuntu mirrors behind on security updates
- Upgrading a password hash function
- Problems with pwdhash
- Testssl.sh vs. OWASP O-saft
2017 24
- Password hashing considerations
- Breaking cryptography using quantum computers
- Comparing secure strings in .NET
- Leave secure cookies alone
- Open redirect with authentication in OpenText Documentum
- Libraries that evaluate remote JavaScript
- Attacks on the Host header
- Hacking from within the browser with Tamper Chrome
- From developer to pentester
- Burp intruder attack types
- Drive-by remote code execution in MAMP
- Prevent session hijacking with token binding
- Bypass CSRF checks using referrer policy
- searching for vulnerable projects
- Automating web application attacks with Tampermonkey
- Generating password lists with regular expressions
- Checking whether files exist outside open_basedir
- Downloading an exposed Mercurial .hg directory
- vBulletin random number function
- Don't use base_convert on random tokens
- Bypass IP blocks with the X-Forwarded-For header
- Securing cookies with cookie prefixes
- Checking passwords against a dictionary in ASP.NET MVC
- Book review: Bulletproof SSL and TLS
2016 30
- Check CRSF token by default in ASP.NET MVC
- Strengthening password hashes by brute-forcing random data
- Adding a HTTP header to Nikto requests
- HTTPS does not provide privacy
- The economics of certificate transparency
- Current state of breach attack
- The password guessing bug in Tenex
- SSRF in LiveAgent
- Attacking JWT authentication
- Uploading webshells using .NET MoxieManager
- XSS in Kayako helpdesk software
- compression side channel attacks
- Interesting recent web application hacks
- Intercepting smartphone HTTP requests on MacOS
- Fuzzing SAML with SAMLReQuest
- Headers to block iframe loading
- Insecure token generation in Kayako
- Overwriting memory in Python
- How PHP's uniqid works
- Requirements for iterative password hashing
- “Clearing secrets from memory”
- XSS in user-agent header in Bolt CMS
- Combining CSRF and timing attacks
- Preventing CSRF with the same-site cookie attribute
- Django's reset password mechanism
- Datatypes for pycrypto in Python 3
- Opentape authorization vulnerability
- Polymorphic Javascript malware
- Cracking PHP rand()
- Circumventing XSS filters