본문 바로가기

전체 글131

[시큐어 코딩] OS 명령어 삽입(Injection) 운영체제 명령어 삽입프로그램 내에서 사용자 입력이 윈도우의 cmd.exe나 유닉스의 sh, bash 같은 쉘 프로그램 실행을 위한 전달인자(argument)로 사용되는 경우, 그 사용자 입력을 애플리케이션에서 충분히 검증하지 않고 사용함에 따라 공격자가 의도하는 명령이 실행될 수 있는 취약점이다. 이런 취약점을 통해 공격자는 공격용 툴을 외부로부터 업로드하거나 업로드된 툴에 대해 실행권한을 부여할 수 있고, 또한 관리자 권한을 획득해 서버를 제어할 수도 있다.  발생 원인PHP의 exec, ASP의 wscript, shell, JSP의 Runtime.exe()와 같은 운영체제 명령을 실행하는 함수의 인자값으로 검증되지 않은 사용자 입력값을 사용하는 경우 발생한다.  이전시간에 수행했던 SQL인젝션과 같은.. 2024. 5. 24.
[React] 처음 만난 리액트 section(3~5) Section 3. JSX JSX의 정의와 역할A syntax extension to JavaScriptJavaScript + XML/HTML내부적으로 XML/HTML 코드를 JavaScript 코드로 변환하는 역할을 함JSX를 사용하면 react에서는 내부적으로 createElement 함수를 사용하도록 변환 됨JSX의 장점 및 사용법간결가독성 향상버그 발견 쉬움Injection Attacks 방어XML/HTML 코드 사이에 { } 를 사용해서 js 코드를 넣어주면 됨 (실습)JSX 코드 작성해보기import React from "react";function Book(props) { return ( {`이 책의 이름은 ${props.name} 입니다.`} {`이 책은 총 ${props.num.. 2024. 5. 18.
[React] 처음 만난 리액트 section(0~2) Section 0. 준비하기 HTML과 CSShtml은 뼈대 css는 레이아웃 SPA(Single Page Application)하나의 페이지만 존재하는 웹 사이트 / 웹 애플리케이션기존 방식: multi page application 사용자가 페이지 요청할 때 마다 새로운 페이지가 로드됨SPA: html 파일이 하나만 존재. 단 하나의 페이지만 존재. body 태그의 내부가 동적으로 채워짐. 리액트가 이를 수행 JavaScript 소개 및 자료형ECMAScript Script Language 특징런타임시에 코드가 해석되고 실행됨 Data Type자바스크립트는 동적타이핑 방식을 사용. 변수의 자료형이 선언 시가 아닌 대입되는 시점에 정해짐 JavaScript의 연산자대입 연산자사칙연산증감연산(전위, 후위.. 2024. 5. 18.
[시큐어코딩] SQL 삽입(Injection) SQL 삽입웹 애플리케이션에서 입력받아 데이터베이스로 전달하는 정상적인 쿼리(CRUD)를 변조, 삽입하여 데이터베이스에 불법적인 데이터 열람, 시스템 명령 수행등 비정상적인 데이터베이스에 접근 하는 기법이다. 모든 종류의 DBMS에 적용 가능한 공격기법이며, 지속적으로 발전되고 있는 공격기법이다. 해당 취약점으로 인해악성 스크립트 실행, 외부 프로그램 사용가능, DB 정보 열람,추가,수정,삭제 가능, 프로시저를 통한 운영체제 명령어 수행, 불법 로그인등의 침해 사고가 발생 할 수 있다. 발생원인웹 애플리케이션의 SQL 쿼리문의 일부로 사용되는 사용자의 입력데이터에 대한 적절한 검증 작업이 수행되지 않아서 발생한다.해결방안규범화 : 데이터 손실이 없는 동일한 내용으로 축소 , 공백 제거 등정규화 : 데이터.. 2024. 5. 17.
[클라우드] 9. MSA (MicroService Architecture) IT 운영의 3대 과제IT 운영 조직의 최대 관심사운영 시스템의 장애, 성능, 변경 대응 (+ 보안, 규제)세 가지 이슈를 제대로 해결 못하면? 조직의 IT 예산 급증  IT 운영의 3대 과제 - 장애시스템을 구성하는 모든 요소 중 장애로부터 자유로운 요소는 없음장애로 인한 피해를 줄이는 방법은 장애 대응 역량!대응 역량은 대응 가능한 환경 구축, 시스템 구조 설계, 운영 방식 등 포함 IT 운영의 3대 과제 - 성능어느 시스템이나 구축 후 오픈 초기에는 적절한 수준의 성능 제공하지만! 발전하는 조직일 수록 시스템 성능 문제에 빨리 부딪힘 • 사용자와 데이터가 빠르게 늘어나기 때문대체로 자원을 최적화하는 방식으로 문제를 해결하지만… 어느 순간부터 한계에 부딪히게 됨 IT 운영의 3대 과제 - 변경 지연시.. 2024. 5. 16.
[깃터디/Alarm] 스터디장 가입승인/거부 알림(fcm) api 구현 💡 .java를 클릭시 관련 커밋으로 이동💡   회고 비동기 처리의 테스트 도중 아래와 같이 오류가 발생했다.Wanted but not invoked:fcmService bean.sendMessageSingleDevice( );-> at com.example.backend.study.api.event.service.FcmService.sendMessageSingleDevice(FcmService.java:37)Actually, there were zero interactions with this mock.Wanted but not invoked:fcmService bean.sendMessageSingleDevice( );-> at com.example.backend.study.api.eve.. 2024. 5. 16.
[깃터디/Alarm] 스터디 가입 신청 알림(fcm) api 구현 💡 .java를 클릭시 관련 커밋으로 이동💡   회고 비동기처리 공부Spring Boot에서 비동기 처리는 멀티스레딩 환경에서 비동기적으로 실행되는 작업을 처리하는 것으로, 동기적인 방식과 비교해 처리 속도와 성능을 개선할 수 있다.비동기 처리 작업이란 멀티스레드를 사용하여 작업을 분리하고, 작업이 끝날 때까지 대기하지 않고 다른 작업을 처리할 수 있다.@Async어노테이션은 Spring이 제공하는 기능으로, 해당 어노테이션이 붙은 메서드를 비동기 처리로 실행할 수 있도록 해준다. 이를 사용하면 메서드가 실행되는 동안 다른 작업을 수행할 수 있으며, 작업의 완료 여부를 확인할 수 있다. @Async @EventListener public void applyMemberListener(A.. 2024. 5. 16.
[깃터디/Convention] 컨벤션 삭제 api 구현 💡 .java를 클릭시 관련 커밋으로 이동💡   회고  // 컨벤션 삭제 @Transactional public void deleteStudyConvention(Long conventionId) { // Convention 조회 StudyConvention studyConvention = studyConventionRepository.findById(conventionId).orElseThrow(() -> { log.warn(">>>> {} : {} studyConventionRepository.findById(conventionId)를 통해 데이터베이스에서 해당 ID를 가진 StudyConvention 객체를 찾고 객체가 존재하면, stu.. 2024. 5. 11.
[깃터디/Convention] 컨벤션 수정 api 구현 💡 .java를 클릭시 관련 커밋으로 이동💡   회고  @Test @DisplayName("컨벤션 수정 테스트") public void updateStudyConvention() { //given User savedUser = userRepository.save(generateAuthUser()); StudyInfo studyInfo = StudyInfoFixture.createDefaultPublicStudyInfo(savedUser.getId()); studyInfoRepository.save(studyInfo); StudyMember leader = StudyMemberFixture.createStudyMemberLe.. 2024. 5. 11.
[깃터디/Convention] 컨벤션 조회 api 구현 💡 .java를 클릭시 관련 커밋으로 이동💡   회고 비즈니스 로직을 구현할때 그에 맞는 컨트롤러, 서비스 구현도 중요하지만 테스트를 작성하는 과정이 중요하다고 느낀다. CRUD에서 R은 유저에게 보여줘야할 정보들이기 때문에 특히나 테스트가 더욱 중요하다고 느낀다. // StudyInfoId로 Convention 전체 가져오기 List findStudyConventionListByStudyInfoId_CursorPaging(Long studyInfoId, Long cursorIdx, Long limit);페이지네이션중에서 커서 기반 페이지네이션 (Cursor-based Pagination) 를 사용하여 구현했다.페이지 네이션이란 전체 데이터에서 지정된 갯수만 데이터를 전달하는 방법을 말하며.. 2024. 5. 11.