programing

교차 도메인 에이잭스 요청 허용

yellowcard 2023. 3. 26. 10:02
반응형

교차 도메인 에이잭스 요청 허용

제 프로젝트에서는 다른 사람이 제 스크립트에 에이잭스 요청을 보낼 수 있도록 해야 합니다.따라서 외부 요청은 다른 웹 사이트나 도메인에서, 또는 브라우저 확장에서 올 수 있습니다.
스크립트의 맨 위에 다음 두 줄을 추가해 두었습니다.

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');  

여기서 질문하겠습니다.제가 놓친 보안상의 고려사항이 있나요?이 간단한 해결책이 심각한 문제를 만들까요?
그렇다면, 어떤 방법이 더 나은 해결책일까요?

답장 감사합니다.

위에서 설명한 바와 같이 누구나 언제든지 페이지를 통해 요청을 보낼 수 있습니다.따라서 보안에 관한 주요 우려사항은 사용자의 입력을 검증하고 일반인이 사용할 수 있는 정보만 공개하는 것입니다.단, 이는 모든 스크립트에 적용됩니다.

(사용자 입력 확인 후) 집중해야 할 두 가지 주요 문제는 다음과 같습니다.

  1. 사용자가 스크립트에 정보를 수신하는 문제가 발생할 수 있습니다.브라우저(같은 브라우저의 플레이버 간에도)에 따라 정보를 반환할 수 없도록 하는 다양한 보안 규칙이 있습니다.이것에 대한 일반적인 해결책은 정보를 "JSONP"로 되돌리는 것입니다.즉, 반환값을 클라이언트가 실행할 수 있는 함수 호출로 랩하는 것입니다.다음은 http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp/)에서 가져온 간단한 예입니다.이 기능을 더 잠그려면 모든 쿼리가 JSONP라고 주장하고 콜백 함수를 전송하지 않는 사용자를 거부할 수 있습니다.

.

<?php

header('content-type: application/json; charset=utf-8');
$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
echo $_GET['callback'] . '('.json_encode($data).')';

?>
  1. 누군가가 너무 정기적으로 전화를 해서 당신의 서비스를 남용하고 있습니다.이 문제를 해결하려면 , IP 주소를 트랩 해, IP 주소로부터 콜이 너무 많이 수신되었을 경우는 거부합니다.완벽하진 않지만, 시작이야.

기타 유의사항:

  • 스크립트에 의해 설정된 쿠키 및 기타 헤더는 무시될 수 있습니다.
  • 세션에도 동일하게 적용됩니다.

zerkms가 말한 것처럼, 만약 그들이 당신의 php 페이지로 "가기만" 한다면, 그들은 그것이 에코된 것이 무엇이든 볼 수 있을 것이다.가능하다면(잘 모르겠다) 불필요한 사용자가 로컬 호스트에서도 자신의 폼을 작성하여 AJAX를 통해 제출하여 원하는 응답을 얻을 수 있습니다.괜찮으시다면, 정보가 애매하거나 유해하지 않다면...그럼 '안전'할 것 같네요.기밀 정보를 취득/전송하는 방법은 적절하지 않습니다.

나한테는 딱 맞아떨어때?

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
header("Allow: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if($method == "OPTIONS") {
    die();
}
private function set_headers() {
    header("HTTP/1.1 ".$this->_code." ".$this->get_status_message());
    header("Content-Type:".$this->_content_type);           
    header("Access-Control-Allow-Origin: *");
}

언급URL : https://stackoverflow.com/questions/13388942/allow-cross-domain-ajax-requests

반응형