개발 Q&A

제목 ci3 csrf 모바일 환경 문의드립니다
카테고리 PHP
글쓴이 izreal 작성시각 2025/11/07 17:08:39
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 93   RSS

config.php에서 아래와 같이 csrf token 설정해서 사용중입니다.

```

$config['csrf_protection'] = TRUE;

$config['csrf_token_name'] = 'csrf_test_name';

$config['csrf_cookie_name'] = 'csrf_cookie_name';

$config['csrf_expire'] = 7200;

$config['csrf_regenerate'] = FALSE;

```

 

그리고 form_open() 메소드 이용해서 post 보냈고 pc 환경에서는 정상적인 결과가 나타납니다.

(같은 url에서 post 했습니다)

그런데 모바일 (아이폰, 사파리)에서 테스트하면 an error was encountred / the action you have required is not allowed 에러가 발생합니다.

테스트를 위해 화면에 $_COOKIE['csrf_cookie_name'] 값을 출력해보았는데, pc에서는 해당 값이 정상적으로 보이고 모바일에서는 보이지 않습니다.

원인을 알 수 있을까요?

아이폰 설정의 쿠키는 열려있습니다.

 이전글 ci에 스트리밍 기술 접목 방법 (1)

댓글

izreal / 2025/11/07 17:13:49 / 추천 0
확인해보니 갤럭시에서는 잘 되네요......
변종원(웅파) / 2025/11/07 18:46:40 / 추천 0
CodeIgniter에서 사파리 사용 시 CSRF 오류가 발생하는 이유는 사파리의 특정 기능(예: 자동 완성, 새 탭에서 열기 등)이 CSRF 토큰을 제대로 처리하지 못하기 때문일 수 있습니다. 이 문제를 해결하려면 csrf_token을 동적으로 전송하거나, 사파리에서 문제가 발생하는 특정 기능을 일시적으로 비활성화하거나, 에디터 업로드처럼 CSRF 보호가 불필요한 부분에서 일시적으로 비활성화하는 방법 등을 고려해볼 수 있습니다.
해결 방법
동적 CSRF 토큰 전송: 사파리가 CSRF 토큰을 올바르게 전달하지 못할 수 있으므로, JavaScript를 사용하여 CSRF 토큰을 AJAX 요청의 헤더나 폼 데이터에 동적으로 포함하여 전송합니다.
특정 기능 일시적 비활성화:
사파리 자체 기능 비활성화: 사파리의 자동 완성 기능이 토큰을 덮어쓰는 경우도 있습니다. 이 경우 사파리 설정에서 관련 기능을 비활성화해 볼 수 있습니다.
csrf_token 비활성화: csrf_token이 꼭 필요한 경우가 아니라면, config/config.php 파일에서 csrf_token을 비활성화할 수 있습니다. 하지만 보안상 추천하지 않으므로, 꼭 필요한 부분만 비활성화하는 것이 좋습니다.
에디터 업로드처럼 특정 기능에서만 CSRF 비활성화: 에디터의 파일 업로드와 같이 별도의 CSRF 토큰 전송이 필요한 경우, 해당 메소드에서는 CSRF 보호를 일시적으로 비활성화할 수 있습니다.
.htaccess 파일 설정 확인: 사파리에서 .htaccess 파일 관련 오류가 발생하는 경우, .htaccess 파일의 설정을 확인하고 수정하여 오류가 발생하는 부분을 해결해 볼 수 있습니다.
추가적인 해결 방법
브라우저 캐시 지우기: 사파리 브라우저의 캐시를 지우고 다시 시도해 보세요.
CSRF 설정 확인: CodeIgniter의 csrf_token 설정이 올바르게 되어 있는지 확인하세요.
다른 브라우저에서 확인: 다른 브라우저에서 테스트해 보시고, 사파리에서만 문제가 발생하는지 확인하세요.
로그 확인: 서버 로그를 확인하여 CSRF 관련 오류가 있는지 확인하고, 오류가 발생하는 부분을 찾으세요.
izreal / 2025/11/07 18:56:16 / 추천 0
답변 감사드립니다. 추가 테스트는 출근 이후에 가능할듯하나, 문제는 아이폰의 웹에서는 csrf의 쿠키값 자체를 받지 못한다는 점입니다.