kkLet’s connect
SECURITY. CURIOSITY. CODE.KEERIT KAPOOR / SELECTED WORK / 2026

Hey, I’m Keerit

Curious mind.
Security first.

Exploring the intersection of cybersecurity and code.
Learning by building. Making every project count.

FIG. 01 / ALWAYS EVOLVING
DRAG TO ROTATE · SCROLL TO DISCOVER
Greater Toronto Area, CanadaAspiring cybersecurity professionalSCROLL TO DISCOVER
IN MY TOOLKITPythonOWASP ZAPNmapBanditAPI security

A CLOSER LOOK / SECURE PYTHON

Behind the project.
Inside the files.

Scroll through the process.
See the thinking. Read the source.

01

THE QUESTION

What’s hiding
in the code?

A security review starts with careful reading. I traced how a local Python demo handled credentials, serialized data and subprocesses, then recorded the risks with Bandit and manual inspection.

Find the weakness. Explain why it matters.
Open original file ↗
04manual-review findings
02

THE REWRITE

Make the safer
path the default.

The hardened implementation uses salted password hashing, JSON parsing and an allow-list for diagnostic commands. Here’s the actual validation function from my project.

Parse the data. Check its shape. Reject the rest.
Open original file ↗
01hardened implementation
03

THE HANDOFF

Good security
should make sense.

I turned the review into a report that connects each finding to its risk and a practical fix. The same approach carries through my web, API and phishing-awareness work.

A finding is useful when someone can act on it.
Open original file ↗
05documented portfolio projects
KEERIT / SECURE-CODING-REVIEW
MDreview_notes.md
### SC-01 - Hard-coded password- **Severity:** Medium- **Location:** `DATABASE_PASSWORD`- **Risk:** Secrets stored in source code can be exposed through repositories, backups, logs, or shared files.- **Fix:** Use environment variables or a secret-management service. Do not commit credentials. ### SC-02 - Weak password hashing (MD5)- **Severity:** High- **Location:** `create_password_hash()`- **Risk:** MD5 is fast and unsuitable for password storage, making password-guessing attacks more practical if hashes are exposed.- **Fix:** Use a dedicated password-hashing method such as Argon2, bcrypt, scrypt, or PBKDF2 with a unique salt and appropriate work factor. ### SC-03 - Unsafe deserialization
REVIEW NOTES / SOURCE EXCERPTView on GitHub ↗
LOCAL EDUCATIONAL PROJECT 01 / 03
THE PROCESS, IN THREE CHAPTERS

DON’T JUST READ IT. TRY IT.

A little input.
A clear boundary.

My Python function accepts a JSON object and rejects other shapes. Try this browser demonstration of the same check.

Read load_preferences() ↗
INPUT LABBROWSER DEMO / NO DATA SENT
Choose an example or write your own JSON.

Demonstrates parsing and object-type validation. It does not run Python or validate individual fields.

01 / SELECTED WORK

Ideas, put into practice.

Real projects. Clear thinking.
A collection that keeps growing.

Security analysis 2026

Exploring data minimisation and access controls through a non-intrusive review of a public demo API.

API securityDevToolsRisk analysis
Awareness 2026

Making email threats easier to recognise through side-by-side examples and practical prevention guidance.

Email analysisSocial engineering
Awareness 2026

An approachable training module that turns phishing red flags into everyday security habits.

TrainingCommunicationAwareness
THE NEXT CHAPTER+

There’s more
in the making.

Follow what I’m building next.

Explore my GitHub ↗

02 / A LITTLE ABOUT ME

Always curious.
Always building.

KK / PROFILE01
Keerit
Kapoor
FOCUS
Cybersecurity & code
BASED IN
Greater Toronto Area
APPROACH
Learn. Build. Document.
Explore my profile ↗

I’m Keerit. I’m exploring how systems work, where they break, and how to make them safer. My work brings together hands-on security analysis, Python code reviews and clear explanations of technical risks.

I like turning complex questions into something practical: an evidence-backed assessment, a safer implementation, or a guide someone can actually use.

RIGHT NOW

Building my next projects and deepening my understanding of network and application security.

PythonOWASP ZAPNmapBanditAPI securityRisk analysisSecurity reportingPhishing awareness

03 / THE JOURNEY SO FAR

Small steps.
Meaningful progress.

Learning, applying, documenting.
Then doing it all again.

GOOD THINGS START WITH A CONVERSATION

Let’s build
something good.

A project, an opportunity, or a shared curiosity.
I’d love to connect.

Say hello on LinkedIn