Skip to content
Open
4 changes: 4 additions & 0 deletions .jules/sentinel.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@
**Vulnerability:** Unhandled exceptions when accessing `localStorage` in strict browser privacy modes (e.g., when cookies are blocked).
**Learning:** Browsers throw a `SecurityError` when `localStorage` is accessed and the user has blocked third-party cookies or is in a strict privacy mode. If unhandled, this crashes the executing script, leading to a degraded user experience (DoS-like behavior for privacy-conscious users).
**Prevention:** Always wrap `localStorage.getItem` and `localStorage.setItem` in `try-catch` blocks to fail securely and fall back to sensible defaults.
## 2026-06-23 - Prevent Reverse Tabnabbing via noopener noreferrer
**Vulnerability:** External links were missing `rel="noopener noreferrer"` (and missing `target="_blank"`), which exposes the site to reverse tabnabbing attacks where the newly opened page can access `window.opener` and navigate the original page to a malicious URL.
**Learning:** The static homepage had several external links without protection against this vulnerability.
**Prevention:** Always include `target="_blank" rel="noopener noreferrer"` for external links to prevent reverse tabnabbing and protect user sessions.
28 changes: 14 additions & 14 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
<a href="#projects" data-i18n="nav.projects">ํ”„๋กœ์ ํŠธ</a>
<a href="#forks" data-i18n="nav.forks">Fork</a>
<a href="#work" data-i18n="nav.work">์ž‘์—…</a>
<a href="https://github.com/ContextualWisdomLab">GitHub</a>
<a target="_blank" rel="noopener noreferrer" href="https://github.com/ContextualWisdomLab">GitHub</a>
</nav>
<div class="language-switch" role="group" aria-label="Language">
<button type="button" data-lang="ko" aria-pressed="true">KO</button>
Expand All @@ -57,7 +57,7 @@ <h1 data-i18n="hero.title">๋งฅ๋ฝ์ง€ํ˜œ ์—ฐ๊ตฌ์‹ค</h1>
๊ตฌ์Šฌ์ด ์„œ ๋ง์ด์–ด๋„ ๊ฟฐ์–ด์•ผ ๋ณด๋ฐฐ์ด๋“ฏ, ๋ฌธ์„œ, ๋ฉ”์ผ, ๋กœ๊ทธ, ํšŒ์˜๋ก์„ ๋งฅ๋ฝ ์•ˆ์—์„œ ์—ฎ์–ด ์‚ฌ๋žŒ์ด ๋ฌด์—‡์„ ๊ฒฐ์ •ํ•˜๊ณ  ๋ฌด์—‡์„ ์‹คํ–‰ํ• ์ง€ ๋ณด์ด๊ฒŒ ํ•˜๋Š” AI ์˜์‚ฌ๊ฒฐ์ • ์ง€์› ์‹œ์Šคํ…œ์„ ์—ฐ๊ตฌํ•˜๊ณ  ๋งŒ๋“ญ๋‹ˆ๋‹ค.
</p>
<div class="hero-actions" role="group" aria-label="Homepage actions">
<a class="button primary" href="https://github.com/ContextualWisdomLab" data-i18n="hero.primaryCta">GitHub ๋ณด๊ธฐ</a>
<a target="_blank" rel="noopener noreferrer" class="button primary" href="https://github.com/ContextualWisdomLab" data-i18n="hero.primaryCta">GitHub ๋ณด๊ธฐ</a>
<a class="button secondary" href="#dikw" data-i18n="hero.secondaryCta">DIKW ๋ณด๊ธฐ</a>
</div>
</div>
Expand Down Expand Up @@ -251,19 +251,19 @@ <h2 data-i18n="references.title">์ฐธ๊ณ ๋ฌธํ—Œ</h2>
<ol class="reference-list">
<li>
<span data-i18n="references.ackoff">Ackoff, R. L. (1989). From data to wisdom. Journal of Applied Systems Analysis, 16(1), 3-9.</span>
<a href="https://faculty.ung.edu/kmelton/documents/datawisdom.pdf">https://faculty.ung.edu/kmelton/documents/datawisdom.pdf</a>
<a target="_blank" rel="noopener noreferrer" href="https://faculty.ung.edu/kmelton/documents/datawisdom.pdf">https://faculty.ung.edu/kmelton/documents/datawisdom.pdf</a>
</li>
<li>
<span data-i18n="references.baskarada">Baskarada, S., &amp; Koronios, A. (2013). Data, information, knowledge, wisdom (DIKW): A semiotic theoretical and empirical exploration of the hierarchy and its quality dimension. Australasian Journal of Information Systems, 18(1).</span>
<a href="https://doi.org/10.3127/ajis.v18i1.748">https://doi.org/10.3127/ajis.v18i1.748</a>
<a target="_blank" rel="noopener noreferrer" href="https://doi.org/10.3127/ajis.v18i1.748">https://doi.org/10.3127/ajis.v18i1.748</a>
</li>
<li>
<span data-i18n="references.fricke">Frickรฉ, M. (2009). The knowledge pyramid: A critique of the DIKW hierarchy. Journal of Information Science, 35(2), 131-142.</span>
<a href="https://doi.org/10.1177/0165551508094050">https://doi.org/10.1177/0165551508094050</a>
<a target="_blank" rel="noopener noreferrer" href="https://doi.org/10.1177/0165551508094050">https://doi.org/10.1177/0165551508094050</a>
</li>
<li>
<span data-i18n="references.brienza">Brienza, J. P., Kung, F. Y. H., Santos, H. C., Bobocel, D. R., &amp; Grossmann, I. (2018). Wisdom, bias, and balance: Toward a process-sensitive measurement of wisdom-related cognition. Journal of Personality and Social Psychology, 115(6), 1093-1126.</span>
<a href="https://doi.org/10.1037/pspp0000171">https://doi.org/10.1037/pspp0000171</a>
<a target="_blank" rel="noopener noreferrer" href="https://doi.org/10.1037/pspp0000171">https://doi.org/10.1037/pspp0000171</a>
</li>
</ol>
</section>
Expand Down Expand Up @@ -324,31 +324,31 @@ <h2 data-i18n="projects.title">๊ณต๊ฐœ ํ”„๋กœ์ ํŠธ</h2>
</div>
<div class="naruon-grid project-grid">
<article>
<h3><a href="https://github.com/ContextualWisdomLab/naruon" data-i18n="projects.naruonTitle">Naruon</a></h3>
<h3><a target="_blank" rel="noopener noreferrer" href="https://github.com/ContextualWisdomLab/naruon" data-i18n="projects.naruonTitle">Naruon</a></h3>
<p data-i18n="projects.naruonBody">๋ฉ”์ผ, ์ฒจ๋ถ€, ์ผ์ •, ์ž‘์—…์„ ๋งฅ๋ฝ์œผ๋กœ ๋ฌถ์–ด ํŒ๋‹จ๊ณผ ์‹คํ–‰์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” AI ์ด๋ฉ”์ผ ์›Œํฌ์ŠคํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.</p>
</article>
<article>
<h3><a href="https://github.com/ContextualWisdomLab/pg-erd-cloud" data-i18n="projects.pgErdTitle">pg-erd-cloud</a></h3>
<h3><a target="_blank" rel="noopener noreferrer" href="https://github.com/ContextualWisdomLab/pg-erd-cloud" data-i18n="projects.pgErdTitle">pg-erd-cloud</a></h3>
<p data-i18n="projects.pgErdBody">PostgreSQL ์Šคํ‚ค๋งˆ๋ฅผ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋งํ•˜๊ณ  ERD์™€ DDL ๊ณต์œ  ํ๋ฆ„์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ผ์šฐ๋“œ MVP์ž…๋‹ˆ๋‹ค.</p>
</article>
<article>
<h3><a href="https://github.com/ContextualWisdomLab/bandscope" data-i18n="projects.bandscopeTitle">BandScope</a></h3>
<h3><a target="_blank" rel="noopener noreferrer" href="https://github.com/ContextualWisdomLab/bandscope" data-i18n="projects.bandscopeTitle">BandScope</a></h3>
<p data-i18n="projects.bandscopeBody">๊ณก์„ ์„น์…˜, ์—ญํ• , ํ…œํฌ, ์—ฐ์Šต ์šฐ์„ ์ˆœ์œ„๋กœ ๋ถ„์„ํ•˜๋Š” ๋กœ์ปฌ ์šฐ์„  ๋ฆฌํ—ˆ์„ค ์•ฑ์ž…๋‹ˆ๋‹ค.</p>
</article>
<article>
<h3><a href="https://github.com/ContextualWisdomLab/codec-carver" data-i18n="projects.codecCarverTitle">codec-carver</a></h3>
<h3><a target="_blank" rel="noopener noreferrer" href="https://github.com/ContextualWisdomLab/codec-carver" data-i18n="projects.codecCarverTitle">codec-carver</a></h3>
<p data-i18n="projects.codecCarverBody">๊ธด ๋…น์Œ์„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•œ FLAC/Opus ์กฐ๊ฐ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” Python CLI์ž…๋‹ˆ๋‹ค.</p>
</article>
<article>
<h3><a href="https://github.com/ContextualWisdomLab/newsdom-api" data-i18n="projects.newsdomTitle">newsdom-api</a></h3>
<h3><a target="_blank" rel="noopener noreferrer" href="https://github.com/ContextualWisdomLab/newsdom-api" data-i18n="projects.newsdomTitle">newsdom-api</a></h3>
<p data-i18n="projects.newsdomBody">์Šค์บ”๋œ ์ผ๋ณธ์–ด ์‹ ๋ฌธ PDF๋ฅผ ๊ธฐ์‚ฌ, ์ œ๋ชฉ, ๋ณธ๋ฌธ, ์ด๋ฏธ์ง€ ๊ตฌ์กฐ์˜ DOMํ˜• JSON์œผ๋กœ ํŒŒ์‹ฑํ•˜๋Š” API์ž…๋‹ˆ๋‹ค.</p>
</article>
<article>
<h3><a href="https://github.com/ContextualWisdomLab/scopeweave" data-i18n="projects.scopeweaveTitle">scopeweave</a></h3>
<h3><a target="_blank" rel="noopener noreferrer" href="https://github.com/ContextualWisdomLab/scopeweave" data-i18n="projects.scopeweaveTitle">scopeweave</a></h3>
<p data-i18n="projects.scopeweaveBody">ํŠธ๋ฆฌ ํŽธ์ง‘, ์ง„ํ–‰๋ฅ  ๊ณ„์‚ฐ, CSV/JSON, ์ฃผ๊ฐ„ Gantt๋ฅผ ์ง€์›ํ•˜๋Š” ์ •์  HTML/CSS/JS WBS ํ”Œ๋ž˜๋„ˆ์ž…๋‹ˆ๋‹ค.</p>
</article>
<article>
<h3><a href="https://github.com/ContextualWisdomLab/VibeSec" data-i18n="projects.vibesecTitle">VibeSec</a></h3>
<h3><a target="_blank" rel="noopener noreferrer" href="https://github.com/ContextualWisdomLab/VibeSec" data-i18n="projects.vibesecTitle">VibeSec</a></h3>
<p data-i18n="projects.vibesecBody">๋ฐ”์ด๋ธŒ์ฝ”๋”ฉ ์•ฑ์„ ์œ„ํ•œ ๋ณด์•ˆ ๊ฐ€๋“œ๋ ˆ์ผ์ž…๋‹ˆ๋‹ค. AI ๊ฐœ๋ฐœ ๋„๊ตฌ ๊ทœ์น™, ์ •์  ์ ๊ฒ€, ๋ฆฌ๋ทฐ์™€ ์ˆ˜์ • ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.</p>
</article>
</div>
Expand Down Expand Up @@ -419,7 +419,7 @@ <h2 data-i18n="work.title">์—ฐ๊ตฌ์—์„œ ์ œํ’ˆ์œผ๋กœ</h2>
>
<p>
<span data-i18n="footer.founded">Founded by</span>
<a href="https://github.com/seonghobae">Seongho Bae</a>.
<a target="_blank" rel="noopener noreferrer" href="https://github.com/seonghobae">Seongho Bae</a>.
<span data-i18n="footer.line">Context into judgment. Judgment into action.</span>
</p>
</footer>
Expand Down
Loading