취업 활동 중 알게 된 것

Jaemin Jung·2021년 12월 29일
0

Job Searching

목록 보기
8/8

Log4J 보안 이슈

Log4J는 log기록의 프레임워크인데 유저가 이용한 모든 활동이나 서버에서 일어나는 모든 일들을 기록하는데 도움을 준다.
log를 포맷팅 하고 필터링하고 어플리케이션의 파일로 이를 기록하는 일을 한다.
인터넷에 연결된 모든 어플리케이션은 log를 기록하는데,
Java를 사용하는 어플리케이션이라면 Log4J를 사용한다.

Log4J 보안 이슈는 Java 프로그래밍 언어로 제작된 Log4J를 사용하는 대부분의 인터넷 서비스에서
매우 중대한 보안 취약점이 발견된 사건으로 컴퓨터 인터넷 역사상 최악의 보안결함사태라고 한다.
애플 텐센트 아마존 테슬라 클라우드플레어 스팀 마인크래프트 구글 링크드인 깃허브등 수많은 기업들이 해당 취약점에 노출되어있다.

cvss 혹은 취약점 등급 시스템은 현재 10/10으로 가장 높은 단계의 심각성을 가지고 있다고 말한다.
그만큼 현 상황이 엄중하고, 심각함을 경고하고있다.

캐나다 정부는 4천여개의 정부 웹사이트를 미리 사고를 예방하기 위해서 폐쇄했고, 미국 국토안보부도 데미지를 줄이고자 노력하고 있다.

이 이슈는 Log4J 취약점 혹은 Log4Shell이라고 한다.

Log4Shell은 12월 9일 알리바바 보안팀에 의해 처음 발견됐다.
이 취약점은 처음 발견된 날 이전인 12월 1일부터 해킹에 사용되고 있었다.

Log4Shell은 제로데이 RCE취약점이다.
이는 시스템의 결함인데 오직 해커만 이 결함을 알고있는 경우를 말하며,
그래서 제로데이 취약점이 발견되면 해당 시스템의 관리자는 이걸 고칠 시간이 0day인 것,
최대한 빠른시간내로 고쳐야한다 왜냐하면 이미 해킹이 진행되고 있기 때문이다.
한마디로 제로데이 = 겁나 빠르게 이걸 고쳐야함!

RCE는 원격 코드 실행(Remote Code Execution)의 약자이다.
즉 해커가 해커의 컴퓨터에서 공격 서버에 마음대로 코드를 돌릴 수 있다는 것이다.
이는 DB를 싹 지워버릴 수도 있고 몽땅 다운로드 받아갈 수도 있고, 비밀번호를 모두 바꾸거나
모든 파일을 암호화 해버린 후 돈을 달라고 위협할 수도 있다.

이 취약점의 원인은 Log4J는 유저의 입력을 어느정도 신뢰하기 때문이다.
공격자가 서버에 요청을 보낼때 입력값으로 URL을 보낸다.
이 요청을 Log4J는 log에 저장하고 저장된 요청 안에 입력값 URL에 요청을 보내게 된다.
이 URL이 공격자의 것일 수 있다는것이다.
이 URL 내보의 코드가 공격받는 서버에서 실행될 수도 있는것이다.

React-router-dom v6

React-router-dom이 업데이트 되었다.
v6로 업그레이드를 시도하기 전에 React는 16.8버전 이상이어야 한다.

Switch가 사라지고 Routes로 변경

  • exact 옵션 삭제
  • Routes는 기존 Switch 처럼 경로를 순서를 기준으로 선택하는 것이 아닌, 가장 일치하는 라우트를 기반으로 선택하게 된다.
  • Routes로 기존 Switch의 기능을 대체 가능

기존 코드

<Switch>
  <Route path="/" ..... />
</Switch>

v6 코드

<Routes>
  <Route path="/" .....  />
</Routes>

Route 사용법 변경

  • 기존 Route는 꼭 Switch 안에 없어도 됐지만, v6의 Route는 Routes의 직속 자식이어야 한다.
  • 기존 사용법은 Children 으로 Component를 작성해야 했지만, 이는 element라는 Props로 전달해야한다.

기존 코드

<Route path="/" exact>
  <Main />
</Route>

v6 코드

<Routes>
 <Route path="/" element={<Main />} />
</ Routes>

useHistory가 사라지고 useNavigate로 변경

  • useNavigate로 기존에 useHistory의 기능을 전부 대체 가능
  • useHistory의 history는 객체였지만 useNavigate의 navigate는 함수다.

기존 코드

 const hisotry = useHistory();
 
 <button
  onClick={() => {
  		history.push("/")
  	}}
 />

history.push('/');
history.goback();
history.go(-2);
history.push(`/user/${user._id}`);
 

v6코드

const navigate = useNavigate();

<button
  onClick={() => {
  		navigate("/")
  	}}
 />

navigate('/');
navigate(-1);
navigate(-2);
navigate(`/user/${user._id}`);

window.open

window.open은 새창을 열어주는 메소드이다.

사용방법

window.open("URL" ,"새창이름", "옵션");

url

HTML페이지, 이미지 파일 또는 브라우저에서 지원하는 리소스에 대한 경로도나 URL이 될 수 있다.
빈 문자열("")로 지정되면 새 창으로 열린다.

windowName (선택항목)

target으로 지정할 경우 <a>, <form>요소의 속성에 대한 대상으로 사용할 수 있다.
이름에는 공백이 없어야 하며, 이 이름이 창 제목으로 사용되지는 않는다.

windowFeatures (선택항목)

새로 연 창에 대한 항목의 기능들을(창의 기본 크기 및 위치, 도구 모음 포함 여부 등) 정의한다.
기능은 쉼표로 구분하여, 문자열에는 공백이 없어야 한다.

옵션

menubar=no //메뉴바 없애기
toolbar=no // 툴바 없애기
location=no //주소표시줄 없애기
status=no //상태표시줄 없애기
scrollbars=no //스크롤바 없애기
fullscreen //최대창크기로 열기 =>F11 눌린 크기이긴 하지만, F11과는 다른 기능임
width //가로크기
height //세로크기
top //위에서부터 위치
left //왼쪽에서부터 위치
resizable=no //창 크기 조절 금지

profile
내가 보려고 쓰는 블로그

0개의 댓글