
js-x-ray @nodesecure/[email protected]
JavaScript ๋ฐ Node.js ์คํ์์ค SAST ์ค์บ๋. ๊ฐ์ฅ ํํ ์ ์ฑ ํจํด์ ํ์งํ๋ ์ ์ ๋ถ์๊ธฐ ๐ฌ.
JS-X-Ray๋ JavaScript ๋ฐ TypeScript SAST ๋๊ตฌ๋ก, ์ ์ฑ ํจํด, ๋ณด์ ์ทจ์ฝ์ ๋ฐ ์ฝ๋ ์ด์์ ์๋ณํฉ๋๋ค. ESLint์ ๋น์ทํ์ง๋ง ๋ณด์ ๋ถ์์ ํนํ๋์ด ์์ต๋๋ค. ์๋ NodeSecure CLI๋ฅผ ์ํด ๋ง๋ค์ด์ก์ง๋ง, JS-X-Ray๋ ์ด์ ๋ ๋ฆฝ์ ์ด๊ณ ์ง์งํ ๊ณต๊ธ๋ง ๋ณดํธ ์ต์ ์ผ๋ก ์ฑ์ฅํ์ต๋๋ค.
๐ ์๋ ๋ฐฉ์
JS-X-Ray๋ ์ ๊ท์์ด๋ Semgrep ๊ท์น์ ๋ง์ด ์ฌ์ฉํ์ง ์๊ณ JS ๋๋ TS ์ฝ๋๋ฅผ **์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)**๋ก ํ์ฑํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ณ์ ์ถ์ , ๋์ import ํด์, ํจํด ๋งค์นญ ๋๊ตฌ๊ฐ ๋์น๋ ์ ๊ตํ ๋๋ ํ ํ์ง๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๋จ์ ์ JS-X-Ray๊ฐ ์์ํ๊ฒ JavaScript/TypeScript ์ํ๊ณ์๋ง ์ ๋ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๐ก ๊ธฐ๋ฅ
- ๋ณ์ ์ถ์ ์ ํตํ
require(),import๋ฐ ๋์ import ์ถ์ - ๋๋ ํ๋ ์ฝ๋ ํ์ง ๋ฐ ์ฌ์ฉ๋ ๋๊ตฌ ์๋ณ (jsfuck, jjencode, obfuscator.io ๋ฑ)
- ์
์ฑ ํจํด ํ๋๊ทธ: ๋ฐ์ดํฐ ์ ์ถ,
process.env์ง๋ ฌํ, ์์ ํ์ง ์์ ์ ธ ๋ช ๋ น - ์ทจ์ฝ ์ฝ๋ ํ์ง:
eval(),Function()์์ฑ์, ReDoS ์ทจ์ฝ ์ ๊ท์, SQL ์ธ์ ์ - ์ทจ์ฝํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ํ๋๊ทธ (MD5, SHA1 ๋ฑ)
- ์ธํ๋ผ ์งํ ์ถ์ถ: URL, IP, ํธ์คํธ๋ช , ์ด๋ฉ์ผ
- ์ค์ ๊ฐ๋ฅํ ๋ฏผ๊ฐ๋ ๋ชจ๋ (๋ณด์์ /๊ณต๊ฒฉ์ ) ๋ฐ ํ์ฅ ๊ฐ๋ฅํ ํ๋ก๋ธ ์์คํ
- JavaScript ๋ฐ TypeScript ๋ชจ๋ ์ง์
๐ ์์ํ๊ธฐ
์ด ํจํค์ง๋ Node ํจํค์ง ์ ์ฅ์์์ ์ ๊ณต๋๋ฉฐ npm ๋๋ yarn์ผ๋ก ์ฝ๊ฒ ์ค์นํ ์ ์์ต๋๋ค.
$ npm i @nodesecure/js-x-ray
# or
$ yarn add @nodesecure/js-x-ray
๐ ์ฌ์ฉ๋ฒ
import { AstAnalyser } from "@nodesecure/js-x-ray";
const scanner = new AstAnalyser();
const { warnings, dependencies } = await scanner.analyseFile("./file.js");
console.log(dependencies);
console.dir(warnings, { depth: null });
์ ์ฒด API ๋ฌธ์, ๊ฒฝ๊ณ ์นดํ๋ก๊ทธ ๋ฐ ๊ณ ๊ธ ์ฌ์ฉ๋ฒ์ @nodesecure/js-x-ray ํจํค์ง README๋ฅผ ์ฐธ์กฐํ์ธ์.
Workspaces
๐ฅ ๊ธฐ์ฌ์ ๊ฐ์ด๋
ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ณ ์ ํ๋ ๊ฐ๋ฐ์๋ ๋จผ์ CONTRIBUTING ๊ฐ์ด๋๋ฅผ ์ฝ์ด์ผ ํฉ๋๋ค.
๊ฐ๋ฐ์ ์๋ฃํ ํ ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ํ ์คํธ(๋ฐ ๋ฆฐํฐ)๊ฐ ์ฌ์ ํ ์ ์์ธ์ง ํ์ธํ์ธ์:
$ npm run check
[!CAUTION] ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ ํด๋น ๊ธฐ๋ฅ์ ๋ํ ํ ์คํธ๋ ํฌํจํด์ผ ํฉ๋๋ค.
๋ด๋ถ API
JS-X-Ray ๋ด๋ถ ์์ ์ ์ํ ๊ธฐ์ฌ์๋ฅผ ์ํด ๋ค์ ๋ฆฌ์์ค๋ ์ ์์ค ์ ํธ๋ฆฌํฐ์ AST ์กฐ์ ํจํด์ ๋ฌธ์ํํฉ๋๋ค:
- ESTree ์ ํธ๋ฆฌํฐ - ESTree AST ๋ ธ๋๋ฅผ ์กฐ์ํ๊ธฐ ์ํ ์ ์์ค ํฌํผ
- ESTree ํ ๋น ๋ฐ ์ ์ธ ํจํด (ํ๋์ค์ด) - AST ํํ์ JavaScript ํ ๋น ๋ฐ ์ ์ธ ํจํด ์ฐธ์กฐ ๊ฐ์ด๋
๋ฒค์น๋งํฌ
js-x-ray์ ์ฑ๋ฅ์ mitata๋ฅผ ์ฌ์ฉํ์ฌ ์ธก์ ๋ฐ ์ถ์ ๋ฉ๋๋ค.
๋ฒค์น๋งํฌ๋ฅผ ์คํํ๋ ค๋ฉด:
workspaces/js-x-ray๋ก ์ด๋ํฉ๋๋ค.npm run bench๋ฅผ ์คํํฉ๋๋ค.
๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ๋ workspaces/js-x-ray/benchmark/report.json์ ์ ์ฅ๋ฉ๋๋ค. ์ด ํ์ผ์ ์๋์ผ๋ก ํธ์งํ์ง ๋ง์ญ์์ค. ๋ชจ๋ ํ ๋ฆฌํ์คํธ์์ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
Contributors โจ
Thanks goes to these wonderful people (emoji key):
License
MIT

























