현재 페이스 북 인증을 사용하여 웹 사이트를 구축 중입니다. 로컬에서 실행 중이며 CSRF 오류가 계속 발생합니다. 나는 그들의 CSRF 보호 메커니즘을 이해하려고 노력하고 있어요 :페이스 북 인증 및 CSRF 메커니즘
$code = $_REQUEST["code"];
$_SESSION['state']= $_REQUEST['state'];//GETS SITE WORKING BUT UNSAFE!!!///
if(empty($code)) {
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
$dialog_url = "http://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
. $_SESSION['state'];
echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
if($_REQUEST['state'] == $_SESSION['state']) {
은 무엇 발생하면이 설정되어 내 $ _REQUEST [ '상태'] 보이지만 내 $ _SESSION [ '상태']되지 않는 것입니다. 따라서 그것을 얻으려면 나는 둘을 똑같이 설정하는 선을 가지고있다. 내 $ code 변수는 결코 비어있는 것처럼 보이지 않으므로 새로운 $ _SESSION [ 'state'변수가 설정되지 않습니다.
먼저 $ _REQUEST [ 'code']의 역할은 무엇입니까 /이 변수는/set의 어디에서 왔습니까?
내 안전하지 않은 코드 줄을 수정하는 방법에 대한 아이디어가 있으십니까?
p.s 나는 FB sdk를 사용해야한다고 알고 있지만 웹 디자인/보안을 배우기 때문에 이것이 어떻게 작동 하는지를 배우기위한 좋은 연습입니다 !!
많은 감사 샘 관심 누구에게도
, 나는 여전히 작동 방법을 일하지만, 한 어쨌든
CSFR 보호 시스템에 의해 작동 ... 내 문제를 해결하지 않은 $ _SESSION [ 'state']에서 서버 측에 State ID를 저장하면 $ _REQUEST [ 'state'] 내에도 동일한 ID가 저장되므로 클라이언트 측에서도 마찬가지입니다. 따라서 CSRF 공격이 발생하면 CSRF 공격 (클라이언트 측)의 상태 값이 $ _SESSION [ 'state']의 상태 값과 일치하지 않으므로 코드가 진행되지 않고 공격이 차단됩니다.
내가 잘못하면 저를 교정하십시오!
네, 맞습니다. $ _SESSIONs이 (가) 제대로 작동하지 않아 다른 사용자 페이지를 통합했다는 것을 알았습니다. 내 쿠키가 제대로 작동하지 않는 것 같지만 문제가 해결되어 해결되었습니다. 나는 이것을 로컬 서버에서 실행하는 어색함에 맡기고있다. –
세션이 달리 작동하지만 여기에서 문제가 발생하는 경우이 목적을 위해 너무 많은 시간을 할애하지 않아도됩니다.나는 당신이 고려할지도 모르는 몇 가지 다른 옵션으로 나의 대답을 약간 편집했다. –