Security 클래스¶
Security 클래스에는 보안을 위해 입력 데이터를 처리하여 안전한 애플리케이션을 만드는 데 도움이 되는 메소드가 포함되어 있습니다.
XSS 필터링¶
CodeIgniter는 쿠키를 하이재킹하거나 다른 악의적인 작업을 시도하는 JavaScript 또는 다른 유형의 코드를 트리거하는 데 일반적으로 사용되는 기술을 찾는 사이트 간 스크립팅 방지 필터를 제공합니다. 허용되지 않는 것이 발견되면 데이터를 문자 엔티티로 변환하여 안전하게 렌더링됩니다.
XSS 필터를 통해 데이터를 필터링하려면 xss_clean() 메소드를 사용합니다:
$data = $this->security->xss_clean($data);
선택적 두 번째 매개변수 is_image를 사용하면 이 함수를 이미지에서 잠재적인 XSS 공격을 테스트하는 데 사용할 수 있어 파일 업로드 보안에 유용합니다. 이 두 번째 매개변수가 TRUE로 설정되면 변경된 문자열을 반환하는 대신 이미지가 안전하면 TRUE를, 브라우저가 실행하려고 할 수 있는 잠재적으로 악의적인 정보가 포함된 경우 FALSE를 반환합니다:
if ($this->security->xss_clean($file, TRUE) === FALSE)
{
// 파일이 XSS 테스트에 실패함
}
중요
HTML 속성 값을 필터링하려면 html_escape()를 대신
사용하세요!
사이트 간 요청 위조 (CSRF)¶
application/config/config.php 파일을 다음과 같이 수정하여 CSRF 보호를 활성화할 수 있습니다:
$config['csrf_protection'] = TRUE;
폼 헬퍼를 사용하는 경우 form_open()이
자동으로 폼에 숨겨진 csrf 필드를 삽입합니다. 그렇지 않으면 get_csrf_token_name()
및 get_csrf_hash()를 사용할 수 있습니다:
$csrf = array(
'name' => $this->security->get_csrf_token_name(),
'hash' => $this->security->get_csrf_hash()
);
...
<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />
토큰은 모든 제출 시 재생성(기본값)되거나 CSRF 쿠키의 수명 동안 동일하게 유지될 수 있습니다. 기본 토큰 재생성은 더 엄격한 보안을 제공하지만 다른 토큰이 무효화됨에 따라(뒤로/앞으로 탐색, 여러 탭/창, 비동기 작업 등) 사용성 문제가 발생할 수 있습니다. 다음 설정 매개변수를 편집하여 이 동작을 변경할 수 있습니다:
$config['csrf_regenerate'] = TRUE;
특정 URI는 CSRF 보호에서 허용 목록에 추가할 수 있습니다(예: 외부적으로 POST된 내용을 예상하는 API 엔드포인트). ‘csrf_exclude_uris’ 설정 매개변수를 편집하여 이러한 URI를 추가할 수 있습니다:
$config['csrf_exclude_uris'] = array('api/person/add');
정규식도 지원됩니다(대소문자 구분 없음):
$config['csrf_exclude_uris'] = array(
'api/record/[0-9]+',
'api/title/[a-z]+'
);
클래스 레퍼런스¶
- class CI_Security¶
- xss_clean($str[, $is_image = FALSE])¶
- 매개변수:
$str (
mixed) – 입력 문자열 또는 문자열 배열
- 반환:
XSS 정리된 데이터
- 반환 형식:
mixed
입력 데이터에서 XSS 악용을 제거하고 정리된 문자열을 반환합니다. 선택적 두 번째 매개변수가 true로 설정된 경우 이미지가 사용하기 안전하면 boolean TRUE를, 악의적인 데이터가 감지되면 FALSE를 반환합니다.
중요
이 메소드는 HTML 속성 값 필터링에 적합하지 않습니다! 대신
html_escape()를 사용하세요.
- sanitize_filename($str[, $relative_path = FALSE])¶
- 매개변수:
$str (
string) – 파일 이름/경로$relative_path (
bool) – 파일 경로의 디렉터리를 보존할지 여부
- 반환:
정제된 파일 이름/경로
- 반환 형식:
string
특히 사용자 입력을 통해 제공된 파일에 유용한 디렉터리 탐색 시도 및 기타 보안 위협을 방지하기 위해 파일 이름을 정제하려고 합니다:
$filename = $this->security->sanitize_filename($this->input->post('filename'));
사용자 입력에 상대 경로(예: file/in/some/approved/folder.txt)를 포함하는 것이 허용되는 경우 선택적 두 번째 매개변수
$relative_path를 TRUE로 설정할 수 있습니다:$filename = $this->security->sanitize_filename($this->input->post('filename'), TRUE);
- get_csrf_token_name()¶
- 반환:
CSRF 토큰 이름
- 반환 형식:
string
CSRF 토큰 이름(
$config['csrf_token_name']값)을 반환합니다.
- get_csrf_hash()¶
- 반환:
CSRF 해시
- 반환 형식:
string
CSRF 해시 값을 반환합니다. 폼을 수동으로 만들거나 유효한 AJAX POST 요청을 전송하기 위해
get_csrf_token_name()과 함께 사용할 때 유용합니다.
- entity_decode($str[, $charset = NULL])¶
- 매개변수:
$str (
string) – 입력 문자열$charset (
string) – 입력 문자열의 문자 집합
- 반환:
엔티티 디코딩된 문자열
- 반환 형식:
string
이 메소드는 ENT_COMPAT 모드의 PHP 기본
html_entity_decode()함수와 매우 유사하게 작동하지만 일부 브라우저에서 허용하기 때문에 세미콜론으로 끝나지 않는 HTML 엔티티를 감지하려고 합니다.$charset매개변수가 비어 있으면 설정된$config['charset']값이 사용됩니다.
- get_random_bytes($length)¶
- 매개변수:
$length (
int) – 출력 길이
- 반환:
임의의 바이트 이진 스트림 또는 실패 시 FALSE
- 반환 형식:
string
mcrypt_create_iv(),/dev/urandom또는openssl_random_pseudo_bytes()(이 순서로) 중 하나가 사용 가능한 경우 적절한 임의 바이트를 얻기 위한 편의 메소드입니다.CSRF 및 XSS 토큰 생성에 사용됩니다.
참고
출력이 암호학적으로 안전하다는 보장은 없으며, 최선의 시도일 뿐입니다.