→ 8 Vulnerabilities
1. CVE-2024-38472
2. CVE-2024-39573 : mod_rewrite proxy handler substitution
3. CVE-2024-38477 : carsh resulting DoF in mod_proxy via a malicious request
4. CVE-2024-38476 - Apache HTTP Server may use exploitable/malicious backend application output to run local handlers via internal redirect
5. CVE-2024-38475 - mod_rewrite weakness when first segment of substitution matches filesystem path
6. ~={red}CVE-2024-38474 - Apache HTTP Server weakness with encoded question marks in backreferences =~
7. CVE-2024-38473 - mod_proxy proxy encoding problem
8. CVE-2023-38709 - HTTP response splitting
mod-rewriteRewriteRule Pattern Substitution [flags] - Substitution → Path || URL
php $1.html : URL rewriting rule within .htaccess files$1 - back-reference in regulare expressionsRewriteRule ^(.*)\.html$ mod_proxy`SetHandler "proxy:http://127.0.0.1:8080/"`
https://docs.google.com/document/d/15yEpi2ZMB2Lld5lA1TANt13SJ_cKygP314cqyKhELwQ/preview?tab=t.0
CommonJs : browser 밖에서도 JS를 사용하기 위해 모인 단체
require() 함수로 모듈 사용→ AMD : browser 내에서의 JS 실행에 중점
브라우저 환경에서 모듈 사용할 수 있도록 → define() 함수로 file scope 역할 대신
→ → 후에 ESM의 표준 import 탄생에 도움
ES Module 등장
문제는 CommonJs와 ESM이 서로 호환되지 않는다는 것.
Tree shaking : JS 맥락에서 죽은 코드 제거를 설명하기 위해 일반적으로 사용
import,export문 사용 → JS 파일에서 사용하기 위한 code module 내보내고 가져오는 것 감지
최신에는 webpack, Rollup를 사용해서 여러 JS 파일 단일 파일로 번들링할 때, 죽은 코드 자동으로 제거
번들링이란?
결과물 파일들 압축하여 크기를 줄인다.
번들링된 web application은 사용자 임의로 조작 불가하다.
변수 충돌의 문제를 해결.
webpack이란?
모듈 번들러. (파일 양, 의존성 트리 증가함에 따라 변수 스코프 문제 및 네트워크 비용 문제 해결 위함)
- HTML, CSS, JS 등 자원을 각각의 모듈로 보고 이를 조합해 하나의 번들로 묶는다
require / module.exports //add.js
module.exports.add = (x,y) => x + y;
// main.js
const { add } = require('./add');
add(1,2);
import / export
// add.js
export function add(x,y) {
return x + y
}
// main.js
import { add } form './add.js';
add(1,2);
.js → package.json의 type field에 따라 결정
type field default value → commonjs || .cjs → CJS
module || .mjs → ESM
var은 let과 다르게 같은 이름의 변수가 여러 번 선언돼도 그대로 사용 가능하다.
→ 추후 개발함에 따라서 중복될 수 있고 실수의 여지가 크다.
가급적 변수는 let으로 선언해야 한다.
const는 선언과 동시에 초기화가 이루어져야 한다. 추후 값을 변경할 수 없는 상수
naming을 할 때, $, _ 는 사용이 가능한데
$ 기호는 jQuery를 사용할 때처럼 이 변수가 별도의 라이브러리 객체라는 것을 가리킬 때 사용한다.
Type → Primitive type(원시 자료형), Object Type(객체 자료형)
JS는 잘못된 숫자 연산( 3 * "hello")를 했을 때, error가 뜨지 않고 NaN(Not a Number)가 뜬다.
오류를 일으키지 않을 뿐, 잘못된 연산이다
아무런 값도 할당하지 않을 때는 null로 초기화한다. 아무것도 하지 않으면 undefined
형 변환
parseInt(variable, 10) String(2022)null 병합 연산자
변수 둘을 비교할 때, 두 값이 모두 정의되어 있으면 왼쪽의 값을 연산 결과로 반환한다.
둘 중 하나가 값이 정의되어 있지 않다면(null || undefined) → 정의된 값을 반환
동적 타이핑과 typeof 연산자
JS는 변수에 숫자를 저장한 후, 문자열을 저장해도 에러가 생기지 않는다. 값을 저장할 때마다 자료형이 동적으로 결정되기 때문이다. 이걸 동적 타이핑이라고 한다.
함수와 Hoisting
JS에서는 함수를 선언하기 전에 호출하지만 오류가 생기지 않는다. → Hoisting
JS는 코드를 실행하기 전에 중첩 함수가 아닌 함수들을 모두 찾아서 미리 생성해둔다.
함수 표현식
JS에서는 함수를 숫자나 문자열처럼 값으로 취급한다. 그래서 변수에 함수를 저장할 수 있다.
이렇게 변수에 함수를 저장해 생성하는 방법을 함수 표현식이라고 한다.
함수를 변수에 저장할 때는 함수 호출할 때와는 다르게 소괄호를 명시하지 않는다.
함수 표현식으로 만든 함수는 함수 선언으로 만든 함수와는 다르게 호이스팅되지 않는다. ← 함수 선언이 아니라 값처럼 취급되기에 호이스팅되지 않는 것.
콜백 함수
함수가 값으로 취급될 수 있기에 다른 함수의 인자로 함수를 사용할 수 있다. 이를 Callback Function이라고 한다.
function parentFunc(callBack) { // -- 1
console.log('parent'); // -- 2
callBack(); // -- 3
}
function childFunc() { // --4
console.log('child'); // --5
}
parentFunc(childFunc); // --6
// parent
// child
함수 진행 순서 : 1 → 4 → 6 → 2 → 3 → 5
화살표 함수
익명 함수를 간결하게 표현하기 위한 함수 표현식의 단축 문법
let func = (parameter) => return_vaule 는 아래와 동일하다.
let funcA = function(parameter){
return value;
};
let greeting = (name) => `hello ${name}`;
const greetingText = greeting('chan');
console.log(greetingText);
//hello chan
https://blog.orange.tw/posts/2024-08-confusion-attacks-en/#%F0%9F%94%A5-2-DocumentRoot-Confusion
https://docs.google.com/document/d/15yEpi2ZMB2Lld5lA1TANt13SJ_cKygP314cqyKhELwQ/preview?tab=t.0
https://toss.tech/article/commonjs-esm-exports-field