2013-09-04 3 views
0

나는 잘 동작하는 codeigniter 응용 프로그램을 가지고 있습니다. 페이스 북 캔버스 앱을 만들고 codeigniter가 생성 한 페이지를로드하려고했습니다. 그것은 작동하지 않았다. 그리고 나는 두려워하게 될 것입니다 - "요청한 행동은 허용되지 않습니다". 내 페이스 북 앱 설정이 올바른지 확인하기 위해 다른 사이트의 페이지를 시도해 보았습니다.CSRF CodeGinter 용 Facebook 캔버스 응용 프로그램을 만들 때 설정 문제 페이지

가능한 문제에 대한 검색을 시작한 결과, cornfig 설정에서 CSRF 보호 = TRUE로 인한 것임을 알 수있었습니다. 따라서 CSRF 보호를 해제하고 작동 여부를 확인하기 만하면됩니다. 그런 다음 작동했고 실제로 codeigniter가 Facebook 캔버스 앱 (샌드 박스 모드)을 통해 페이지를 생성 할 수있었습니다.

form_open() 함수에 의존하지 않고 csrf 토큰에 숨겨진 필드를 하드 코딩하면 좋습니다) 우리는이 규칙을 피할 수 있었고, 그 논리에 의해 전혀 형식이없는 페이지가 있으면 잘 작동합니다. 그리고 양식이없는 페이지조차도로드 할 수 없었습니다.

나는 어디에서나 AJAX를 사용하지 않습니다.

저는 CI 2.1.3을 사용하고 있습니다.

하나의 관련 링크 - http://ellislab.com/forums/viewthread/228160/#1038448 Stackoverflow 및 기타 포럼에 많은 비슷한 질문이 있지만 만족스러운 답변을 찾을 수 없습니다.

아파치 로그가 표시된다면 CSRF 보호를 해제하는 것이 좋습니다.

그래서 CSRF 보호 기능을 끄지 않고 코드북 생성 페이지를 Facebook 캔버스 앱에 표시하려면 어떻게합니까?

모든 포인터가 유용 할 것입니다. 시간 내 주셔서 감사합니다.

답변

1

이 문제의 근본 원인은 Facebook이 앱 페이지 iframe을 어떻게 호출하는지입니다. Facebook은 기본적으로 $ _POST 배열에 매개 변수 (signed_request)를 전송합니다. 그러나 Codeigniter가 CSRF 보호를 확인하면 게시 배열에 csrf 토큰이 없습니다.

이렇게 분명히 솔직한 해결책은 없습니다. csrf_verify의 조건을 system\core\Security.php에서 변경할 수 있으므로 $ _POST [ 'signed_request']의 값이 있는지 확인하지 않아도되지만 좋은 생각이 아닙니다.