Reconciliation을 구현하기 전에 `workLoop()`와 `doNextWork()`를 변경했다.변경 목적은 전체 트리 렌더링이 완료되기 전에 브라우저가 작업을 방해할 수 없도록 하는 것이다. 하나의 트리가 모두 만들어지면(다음 work 없음) 그 때 한 번에 전체 fiber 트리를 DOM에 집어 넣는다.function doNextWork(fiber) { // ... if (fiber.parent) { fiber.parent.dom.appendChild(fiber.dom); } // ...} 기존에는 doNextWork 함수 내부에서 작업 중간에 parent node가 존재하는 경우 child를 parent에 append 처리 했는데, 이 부분을 제거했다. doNextWo..
React는 자바스크립트 기반이기 때문에 싱글 스레드로 동작한다.그러나 Concurrent Mode를 이용하면 여러 작업을 동시에 처리할 수 있다. 기본적으로 리액트는 UI 렌더링 도중에 렌더링 이외의 모든 작업을 중단하는데, 동시성은 여러 작업을 작은 단위로 나눈 뒤 그들 간의 우선 순위를 정하고 작업을 번갈아 수행하는 방식이다. 실제로 작업이 동시에 이루어지는 것은 아니지만 작업 간 전환이 매우 빠르게 일어나기 때문에 동시에 작업하는 것과 같은 효과를 낸다.보통 이런 문제를 해결하기 위해 디바운스나 스로틀이 사용되는데, 이 방식에는 약간의 문제가 있다.유저가 input에 뭔가를 입력함과 동시에 무거운 작업을 수행해야 하는 경우, 디바운스는 사용자의 마지막 입력이 끝난 뒤 일정 시간이 지나면 작업을 시..
const element = ( link to index console.log("click")}> click me... ) React에서 JSX로 위와 같이 작성하면 Babel을 통해 만들어진 결과물을 볼 수 있다. Babel 공식 문서에는 결과물에 대한 예제가 다음과 같이 나와 있다.// inputconst profile = ( {[user.firstName, user.lastName].join(" ")} );// outputimport { jsx as _jsx } from "react/jsx-runtime";import { jsxs as _jsxs } from "react/jsx-runtime";..
보호되어 있는 글입니다.
ConceptCSRF(Cross-site request fogery, 교차 사이트 요청 위조)는 원클릭 공격 또는 세션 라이딩으로도 알려져 있으며 XSRF로도 불린다. 이는 사용자가 신뢰하는 웹 사이트에서 허가되지 않은 명령이 전송되는 방식의 공격이다. XSS와 달리 CSRF는 사이트가 사용자의 브라우저를 신뢰한다는 점을 악용한다. 그럴듯한 웹 페이지를 만들어서 이용자의 입력을 유도하고, 이를 은행이나 포털 사이트 등으로 전송해 마치 이용자가 동의한 것 같은 요청을 발생시킨다. 이용자의 세션 쿠키를 사용할 수 있다면, 이용자의 권한으로 웹 서비스의 기능을 사용할 수 있다. CSRF는 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점이다. 공격자는 이용자의 권한으로 서비스를 사용해 이..
관련 개념테스트 하려는 대상(System Under Test)을 SUT라고 한다. 유저의 어떤 행동에 대한 결과를 테스트하는 경우 유저는 SUT다. 예를 들어 유저가 어떤 글을 저장하는 로직에 대한 테스트 코드가 있다면 SUT는 유저다. 저장을 하는 행위가 SUT라고 생각하기 쉽지만 SUT는 테스트하고자 하는 주요 대상이 되는 Unit을 의미한다. 테스트는 행동에 집중해야 한다. 유저가 시스템을 사용하는 User Story를 생각해야 하고, 시나리오를 고려해야 한다. 이를 지키기 위해 테스트 코드를 작성할 때 given-when-then 뼈대를 사용하기도 한다. 어떤 상황이 주어졌을 때(given), 어떤 행동을 하면(when), 결과가 이러해야 한다(then)는 구조다. 대상 함수의 구현을 호출하지 ..
XSS 유형ReflectedDOM-basedStored or PersistentUniversal Reflected XSSReflected XSS는 웹 어플리케이션의 지정된 파라미터를 사용할 때 발생하는 취약점을 이용한 공격이다. 검색 결과, 에러 메세지 등 서버가 외부에서 입력을 받아 브라우저에 응답할 때, 파라미터에 삽입된 악성 스크립트를 사용자에게 그대로 전달하면서 발생한다.공격자는 파라미터에 악성 스크립트가 포함된 URL을 피해자에게 전달한다(링크, 악성 메일 등).피해자가 악성 웹 페이지를 로드하는 링크를 클릭해 서버에 요청한다.웹 서버의 응답 페이지에 악성 스크립트 포함되고, 이는 피해자의 브라우저에서 실행된다.스크립트가 Session ID와 같은 민감한 정보를 훔쳐서 공격자에게 전송한다. DO..
9 `user_data` 테이블에서 모든 사용자를 데이터를 가져오는 기본적인 쿼리는 다음과 같다.SELECT * FROM user_data;SELECT * FROM user_data WHERE 1=1;두 번째 쿼리와 같이 조건문이 있는 경우 WHERE 절을 항상 참으로 맞춰 주어야 한다. 따라서 라인의 마지막에 `OR 1=1`과 같은 부분이 추가되면 앞의 AND 절과 관계 없이 OR 절의 뒷부분에서 TRUE가 되므로 WHERE절이 참이 된다.SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '' OR '1'='1';따라서 `' OR '1'='1`이 들어가면 모든 데이터를 조회할 수 있다. 10 2개의 입력 필드를 이용해 `user_da..
GoalAfter all this git stuff its time for another escape. Good luck! 모든 git 작업을 마친 후 또 다른 탈출의 시간이다. 행운을 빈다! Commands you may need to solve this level `sh`, `man` Write UpWELCOME TO THE UPPERCASE SHELL >> id sh: 1: ID: Permission denied >> reset sh: 1: RESET: Permission denied >> 모든 입력을 대문자로 변경하는 shell이다. 이 shell에 대한 정보를 확인해볼 필요가 있다. 다른 계정으로 로그인하면 해당 shell의 정보를 볼 수 있을 것이다.bandit0@bandit:~$ cat /e..
GoalThere is a git repository at ssh://bandit31-git@localhost/home/bandit31-git/repo via the port 2220. The password for the user bandit31-git is the same as for the user bandit31. Clone the repository and find the password for the next level. 2220번 포트를 통해 ssh://bandit31-git@localhost/home/bandit31-git/repo에 접속하면 git 저장소에 접근할 수 있다. bandit31-git 유저의 패스워드는 bandit31 유저의 패스워드와 동일하다. 저장소를 클론해 다음 레벨의 ..
- Total
- Today
- Yesterday
- Database
- opengraph
- oauth2
- Spring
- WarGame
- XSS
- sqli
- Bandit
- askers
- Framework
- DP
- java
- sql injection
- SEO
- Spring Security
- Transaction
- 회고
- Misc
- Dreamhack
- JPA
- webgoat
- linux
- CSRF
- WEB
- math
- test
- PS
- React
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |