복붙노트

[JQUERY] 어떻게 우회에 대한 액세스 제어 - - 원산지를 허용 하시겠습니까?

JQUERY

어떻게 우회에 대한 액세스 제어 - - 원산지를 허용 하시겠습니까?

해결법


  1. 1.retrieve.php의 상단에 넣어 :

    retrieve.php의 상단에 넣어 :

    header('Access-Control-Allow-Origin: *');  
    

    참고이 효과적으로 CORS 보호 기능을 비활성화하고 사용자가 공격에 노출 떠난다. 당신은 당신이 모든 기원을 허용 할 필요가 전혀 특정하지 않은 경우, 당신은보다 구체적인 기원이 아래로는 락 :

    header('Access-Control-Allow-Origin: https://www.example.com')
    

    액세스 제어 - 허용 - 원산지의 더 나은 이해를 위해 다음과 같은 스택 대답을 참조하십시오

    https://stackoverflow.com/a/10636765/413670


  2. 2.좋아,하지만 당신에게 * 와일드 카드이며 모든 도메인에서 크로스 사이트 스크립팅을 허용하는 모든 알아?

    좋아,하지만 당신에게 * 와일드 카드이며 모든 도메인에서 크로스 사이트 스크립팅을 허용하는 모든 알아?

    당신은 허용있어 모든 사이트에 대해 여러 액세스 제어 - 허용 - 원산지 헤더를 보내고 싶습니다 -하지만 불행히도 그 공식적으로 여러 액세스 제어 - 허용 - 원산지 헤더를 보내, 또는 다수의 기원에 넣어 지원되지 않습니다.

    당신은 원산지를 확인하고, 허용 할 것인지, 다시 헤더에 하나를 전송하여이 문제를 해결 할 수 있습니다 :

    $origin = $_SERVER['HTTP_ORIGIN'];
    $allowed_domains = [
        'http://mysite1.com',
        'https://www.mysite2.com',
        'http://www.mysite2.com',
    ];
    
    if (in_array($origin, $allowed_domains)) {
        header('Access-Control-Allow-Origin: ' . $origin);
    }
    

    그게 훨씬 안전합니다. 당신은 일치를 편집하고 같은 몇 가지 정규식, 또는 뭔가 수동 기능을 변경할 수 있습니다. 적어도 이것은 단지 1 헤더를 다시 보낼 것이다, 당신은 요청이 온 있는지 그것 하나가 될 것입니다. 모든 HTTP 헤더는 스푸핑 될 수 있다는 메모를 할 수 있지만,이 헤더는 클라이언트의 보호를 위해 제발. 그 값으로 자신의 데이터를 보호하지 마십시오. 더 알고 싶은 경우에, CORS 및 CSRF에 비트를 읽어 보시기 바랍니다.

    왜 안전?

    다른 위치에서 액세스 허용은 자신의 신뢰할 수있는 사이트는 세션 highjacking 수 있습니다. 나는 약간의 예와 함께 갈거야 - 당신이 당신의 자신의 웹 사이트의 어딘가에을 확인하고 페이스 북에 AJAX 호출 (또는 오픈 iframe을) 발사 할 수있는이 수단 - 이미지 페이스 북은 와일드 카드 기원을 할 수 있습니다. 이것은 당신이 당신의 웹 사이트의 방문자의 페이스 북의 정보를 기록 잡을 수 있다는 것을 의미합니다. 더 나쁜 - 당신은 다른 사람의 페이스 북에 스크립트 POST 요청 및 사후 데이터 수 - 그들은 당신의 웹 사이트를 탐색 만있다.

    ACAO 헤더를 사용할 때 매우주의해야합니다!


  3. 3.경고, 크롬 (그리고 다른 브라우저)를 사용하면 다른 답변의 일부를 따르는 경우 여러 ACAO 헤더가 설정되어 있는지 불평 할 것이다.

    경고, 크롬 (그리고 다른 브라우저)를 사용하면 다른 답변의 일부를 따르는 경우 여러 ACAO 헤더가 설정되어 있는지 불평 할 것이다.

    이 오류는 ____ XMLHttpRequest의 같은로드 할 수있을 것입니다. '____, ____, ____'헤더 여러 값이 포함 된 '액세스 제어는-원점 허용',하지만 하나만 허용됩니다. 원산지 '____'는 따라서 액세스가 허용되지 않습니다.

    이 시도:

    $http_origin = $_SERVER['HTTP_ORIGIN'];
    
    $allowed_domains = array(
      'http://domain1.com',
      'http://domain2.com',
    );
    
    if (in_array($http_origin, $allowed_domains))
    {  
        header("Access-Control-Allow-Origin: $http_origin");
    }
    

  4. 4.MVC3 컨트롤러를 호출 할 때 나는이 문제를 해결했습니다. 나는 추가 :

    MVC3 컨트롤러를 호출 할 때 나는이 문제를 해결했습니다. 나는 추가 :

    Response.AddHeader("Access-Control-Allow-Origin", "*"); 
    

    전에 내

    return Json(model, JsonRequestBehavior.AllowGet);
    

    또한 내 $의 아약스는 내가 그 JSON이 작업에 전달되는 알고 내가 주석 그래서, 내 아약스 호출에 컨텐츠 유형 헤더를 허용하지 않습니다 불평했다.

    희망이 도움이.


  5. 5.그것은 어떤 잎하면 크로스 사이트 스크립팅에 활짝 열려 사용 *에 정말 나쁜 생각입니다. 당신은 기본적으로 당신의 현재 SSL 설정 범위 모든 시간을 자신의 도메인, 선택적으로 추가 도메인을합니다. 당신은 또한 그들 모두가 하나의 헤더로 전송하고 싶습니다. 다음은 항상 현재 페이지와 같은 SSL 범위에서 자신의 도메인에 권한을 부여하며, 또한 선택적으로 추가 도메인의 수를 포함 할 수 있습니다. 그것은 하나의 헤더로 그들 모두를 보내고, 다른 무언가가 이미 다중 접속 제어 헤더되는 보냈습니다 대해 불평 브라우저의 기회를 피하기 위해 그들을 보낸 경우 이전 (들)을 덮어 쓰게됩니다.

    그것은 어떤 잎하면 크로스 사이트 스크립팅에 활짝 열려 사용 *에 정말 나쁜 생각입니다. 당신은 기본적으로 당신의 현재 SSL 설정 범위 모든 시간을 자신의 도메인, 선택적으로 추가 도메인을합니다. 당신은 또한 그들 모두가 하나의 헤더로 전송하고 싶습니다. 다음은 항상 현재 페이지와 같은 SSL 범위에서 자신의 도메인에 권한을 부여하며, 또한 선택적으로 추가 도메인의 수를 포함 할 수 있습니다. 그것은 하나의 헤더로 그들 모두를 보내고, 다른 무언가가 이미 다중 접속 제어 헤더되는 보냈습니다 대해 불평 브라우저의 기회를 피하기 위해 그들을 보낸 경우 이전 (들)을 덮어 쓰게됩니다.

    class CorsAccessControl
    {
        private $allowed = array();
    
        /**
         * Always adds your own domain with the current ssl settings.
         */
        public function __construct()
        {
            // Add your own domain, with respect to the current SSL settings.
            $this->allowed[] = 'http'
                . ( ( array_key_exists( 'HTTPS', $_SERVER )
                    && $_SERVER['HTTPS'] 
                    && strtolower( $_SERVER['HTTPS'] ) !== 'off' ) 
                        ? 's' 
                        : null )
                . '://' . $_SERVER['HTTP_HOST'];
        }
    
        /**
         * Optionally add additional domains. Each is only added one time.
         */
        public function add($domain)
        {
            if ( !in_array( $domain, $this->allowed )
            {
                $this->allowed[] = $domain;
            }
        /**
         * Send 'em all as one header so no browsers grumble about it.
         */
        public function send()
        {
            $domains = implode( ', ', $this->allowed );
            header( 'Access-Control-Allow-Origin: ' . $domains, true ); // We want to send them all as one shot, so replace should be true here.
        }
    }
    

    용법:

    $cors = new CorsAccessControl();
    
    // If you are only authorizing your own domain:
    $cors->send();
    
    // If you are authorizing multiple domains:
    foreach ($domains as $domain)
    {
        $cors->add($domain);
    }
    $cors->send();
    

    당신은 아이디어를 얻을.


  6. 6.당신은 실제로 서버에서 전송되는 응답에 대한 액세스 제어 - 허용 - 원산지 헤더를 추가 봤어? 마찬가지로, 액세스 제어 - 허용 - 원산지 : *를?

    당신은 실제로 서버에서 전송되는 응답에 대한 액세스 제어 - 허용 - 원산지 헤더를 추가 봤어? 마찬가지로, 액세스 제어 - 허용 - 원산지 : *를?

  7. from https://stackoverflow.com/questions/7564832/how-to-bypass-access-control-allow-origin by cc-by-sa and MIT license