2011-01-07 5 views
3

저는 Codeigniter 2.0 웹 사이트에 Janrain Open ID를 구현했습니다. 그것은 내 codeigniter 설정 파일에서 CSRF 보호를 가능하게 할 때까지 훌륭하게 작동했습니다.OpenID iframe에 CSRF 구현

나는 그것에 대해 읽었다. 내 웹 사이트의 모든 양식에 토큰을 포함하는 숨겨진 양식 요소를 포함해야하며, 수신 페이지에서 게시물을 읽은 후 쿠키 토큰에 대해 확인해야한다.

이것은 모두 훌륭하고 멋쟁이지만, 내가 잠시 멈추는 이유는 지금 오픈 아이디 (로그인 폼은 janrain.com에서 호스팅되는 iframe에서 온다)를 사용하여 내 사이트에 로그인하려고 할 때입니다. 양식이 어떻게 보이는지에 대한 제어권이 없기 때문에 모든 종류의 숨겨진 된 게시물 값을 포함 할 수 없으며 janrain이 어떤 페이지를 반환할지 알 수 있도록 반환 URL 만 제공 할 수 있습니다.

양식이 내가 제어하지 않는 iframe에있는 경우 양식과 함께 제출하려면 어떻게해야합니까?

답변

1

해결되었습니다. 나는 CSRF 토큰을 URL의 일부로 포함시킨 리턴 URL을 iframe으로 보냈다. Janign이 반환 URL로 돌아 오면 Codeigniter가 Security :: csrf_verify() 안의 보안 검사를 통과 할 때 URL에 대해 약간의 검사를 수행하여 내 토큰이 일치하는지 확인합니다 (불행히도 어떤 이유로 든 CI 라이브러리를 사용할 수 없었습니다). 그래서 나는 explode ('/', $ _SERVER [REQUEST_URI]))를 사용하여 URL을 직접 파싱했다. URL에서 csrf 쿠키 토큰과 일치하는 항목을 찾으면 모두 만족하고 Codeigniter에서 일반적으로 수행하는 POST 변수를 확인하지 않습니다.

0

나는 또한 컨트롤러마다 CSRF를 끄는 방법을 찾고있었습니다. 나는 그런 식으로했다 :

if(stripos($_SERVER["REQUEST_URI"],'/controller') === FALSE) 
{ 
    $config['csrf_protection'] = TRUE; 
} 
else 
{ 
    $config['csrf_protection'] = FALSE; 
} 

가 신뢰할 수 있는지 config.php를 에 나도 몰라,하지만 나를 위해 작동합니다.

1

당신은 또한 당신의 토큰 URL의 끝에이를 추가 할 수 있습니다 그래서 당신이 Janrain을위한 임베디드은 iframe을 사용하고 가정 해 봅시다

?ci_csrf_token='.$this->security->get_csrf_hash() 

을, 전체 코드와 같은 찾고 끝낼 것 :

<iframe src="https://MYACCOUNT.rpxnow.com/openid/embed?token_url=<?PHP echo rawurlencode($token_url).'?ci_csrf_token='.$this->security->get_csrf_hash(); ?>" scrolling="no" frameborder="0" seamless="seamless" style="width:400px; height:240px;"></iframe> 

이 코드는 내 codeigniter에서 훌륭하게 작동하며 CSRF 보안을 해제 할 필요가 없습니다.