Secure Coding in C - FILE I/O

markyang92·2021년 6월 21일
0

Secure Coding in C

목록 보기
6/7
post-thumbnail

FILE I/O

fopen(), 파일 생성에 대해 특정 조건 가정X

  • C99
    • fopen()은 존재하는 파일을 열거나 새로 생성할 때 사용한다.
      • 하지만 이 함수는 읽기 모드, 새로운 파일 생성했는가? 구별 하지 않는다!!
      • 덮어쓰기, 의도하지 않은 파일 접근 가능성

POSIX open() 함수 사용 권장

  • open()

열린 파일에 remove() 주의

  • 열린파일에 대해 remove()사용은 구현마다 다르다.
  • 보안 문제 유발

1. 부적절한 코드

  • 열린 파일을 그냥 삭제 시켜버린다.....


1. 해결방법

  • POSIX unlink() 함수 사용
    • 그런데 unlink도 파일 삭제함(링크 하나 줄여서)

동시에 동일파일 중복 열기 금지

  • 한 파일을 동시에 열 때, 동작은 구현마다 다르다.
    • 비정상적 종료, 데이터 무결성 위반 발생

  • 함수의 인자로 파일포인터를 열자

sizeof(char)==sizeof(int) 일 때는 파일의 끝, 파일 에러를 찾기 위해 feof(), ferror() 함수 사용하라

  • char 타입이 int 타입과 크기가 같을 경우 EOF을 구분할 수 없다.
  • 만약 파일의 끝이나 파일에 대해 에러를 검출하고 싶다면, 다음의 함수를 사용할 것
    • feof()
    • ferror()

1. 부적절한 코드

  • 다음 코드는 charint가 같은 크기인 시스템에서는 제대로 동작하지 않는다.


1-1. 해결 방법

  • feof() 사용


FILE I/O 복사 금지

  • FILE 객체의 복사본을 실제 객체 대신 사용하면 프로그램 다운, 서비스 거부 공격
  • STDIO 객체를 복사 사용 금지
  • STDIO 포인터에 대한 복사는 허용


flush나 위치 조정 함수 없이 스트림으로 부터 입출력 교대 수행 금지

  • 스트림에 대해 출력 다음에 fflush(), fseek(), fsetpos(), rewind() 함수 호출 없이
    • 바로 입력 받기
  • 스트림 입력 다음에 fseek(), fsetpos(), rewind() 함수 호출 없이
    • 바로 출력 하기

undefined behaviour 유발


1. 부적절한 코드

  • 입출력 스트림쓸 때 조심!



1. 해결 방법

  • 파일 오프셋 관리해라: offset을 제일 처음으로 이동 시킨다.



profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글