http://developers.facebook.com/docs/authentication/에 제공된 Facebook 인증 예제는 auth_request의 status
부분에 임의의 정보 그룹을 삽입하여 CSRF를 방지하려고 시도합니다. auth_request가 반환되면 코드는 동일한 임의 그룹이 요청과 함께 반환되었는지 확인합니다. CSRF가 어떻게 앞서고 있습니까? Facebook 인증 예제 CSRF
<?php
$app_id = "YOUR_APP_ID";
$app_secret = "YOUR_APP_SECRET";
$my_url = "YOUR_URL";
session_start();
$code = $_REQUEST["code"];
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']) {
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;
$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$graph_url = "https://graph.facebook.com/me?access_token="
. $params['access_token'];
$user = json_decode(file_get_contents($graph_url));
echo("Hello " . $user->name);
}
else {
echo("The state does not match. You may be a victim of CSRF.");
}
?>
정보의 비트가 여기에 요청에 추가됩니다
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'])
가 같은가 "국가"는 CSRF를 보장하지 않습니까?
감사
이 공격이 어떻게 작동하는지 시나리오를 제공해 줄 수 있습니까? – Roman
@Roman 인터넷에는 많은 공격 및 예방 사례가 있습니다. [OWASP] (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_ (CSRF) #Examples), [Wikipedia] (http://en.wikipedia.org/wiki/Cross-site_request_forgery#Example_and_characteristics) , [제프의 블로그] (http://www.codinghorror.com/blog/2008/10/preventing-csrf-and-xsrf-attacks.html) – adlawson
고마워, 나는 이미 그걸 봤어. 그래도 알아 내는데 어려움이있다. 우리가 교환에서 국가를 생략하면 공격이 페이스 북과 얼마나 정확하게 작용할 것인가. – Roman