programing

Access-Control-Allow-Origin을 바이패스하는 방법

procenter 2022. 9. 24. 22:10
반응형

Access-Control-Allow-Origin을 바이패스하는 방법

이러한 Ajax 콜을 방지하도록 설정된 플랫폼에서 자신의 서버에 Ajax 콜을 실행하고 있습니다(단, 서버에서 데이터를 가져와 서버의 데이터베이스에서 검색된 데이터를 표시하려면 이 콜이 필요합니다).내 ajax 스크립트는 작동하고 있으며, 데이터를 서버의 php 스크립트로 전송하여 처리할 수 있습니다.단, 처리한 데이터는 에 의해 차단되어 반환할 수 없습니다."Access-Control-Allow-Origin"

해당 플랫폼의 소스/코어에 액세스할 수 없으므로 이를 허용하지 않는 스크립트를 제거할 수 없습니다.(P/S Google Chrome의 콘솔을 사용하여 이 오류를 발견했습니다.)

Ajax 코드는 다음과 같습니다.

 $.ajax({
     type: "GET",
     url: "http://example.com/retrieve.php",
     data: "id=" + id + "&url=" + url,
     dataType: 'json',   
     cache: false,
     success: function(data)
      {
        var friend = data[1];              
        var blog = data[2];           
        $('#user').html("<b>Friends: </b>"+friend+"<b><br> Blogs: </b>"+blog);

      } 
  });

또는 이 있습니까?JSON위의 ajax 스크립트와 동등한 코드?생각합니다JSON허용됩니다.

누가 좀 도와줬으면 좋겠어요.

이걸 회수 위에 올려놔php:

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

이것에 의해, 사실상 CORS 보호가 무효가 되어, 유저가 공격에 노출되는 것에 주의해 주세요.모든 오리진을 허용해야 하는지 확실하지 않은 경우, 보다 구체적인 오리진으로 제한해야 합니다.

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

자세한 내용은 다음 스택 답변을 참조하십시오.Access-Control-Allow-Origin

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

경고: Chrome(및 기타 브라우저)는 다른 답변에 따라 여러 ACAO 헤더가 설정되어 있다고 불만을 제기합니다.

오류는 다음과 같습니다.

이것을 시험해 보세요.

$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");
}

MVC3 컨트롤러를 호출할 때 이 문제가 해결되었습니다.덧붙였습니다.

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

내 앞에

return Json(model, JsonRequestBehavior.AllowGet);

그리고 나의$.ajaxAjax 콜에서 Content-type 헤더가 받아들여지지 않는다고 불평하고 있기 때문에 액션에 전달되는 JSON을 알고 있기 때문에 코멘트 아웃했습니다.

도움이 됐으면 좋겠다.

사용하는 것은 정말 나쁜 생각이다.*사이트 간 스크립팅에 폭넓게 대응할 수 있습니다.기본적으로 자신의 도메인이 항상 필요하고 현재 SSL 설정으로 범위가 지정되며 선택적으로 추가 도메인이 필요합니다.또, 모든 것을 1개의 헤더로서 송신할 필요가 있습니다.다음은 항상 현재 페이지와 동일한 SSL 범위에서 자신의 도메인을 승인하며, 임의로 임의의 수의 추가 도메인을 포함할 수 있습니다.모든 것을 1개의 헤더로 송신하고, 다른 것이 이미 송신하고 있는 경우는, 브라우저가 복수의 액세스컨트롤 헤더를 송신하고 있다고 불평하는 것을 피하기 위해서, 이전의 헤더(들)를 덮어씁니다.

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();

무슨 말인지 아시겠죠?

Access-Control-Allow-Origin 접근컨트롤-Origin은 접근컨트롤-Allow-Origin?를 들면, '아까보다' 이런 거 있잖아요.Access-Control-Allow-Origin: *

언급URL : https://stackoverflow.com/questions/7564832/how-to-bypass-access-control-allow-origin

반응형