동일한 오리진 정책이 적용되는지 확인합니다.
실제로 아약스 방법을 사용하기 전에 URL에 동일한 오리진 정책이 적용되는지 "안전한" 방법이 있습니까?제가 가진 것은 다음과 같습니다.
function testSameOrigin(url) {
var loc = window.location,
a = document.createElement('a');
a.href = url;
return a.hostname == loc.hostname &&
a.port == loc.port &&
a.protocol == loc.protocol;
}
이런 식으로 작동하지만, 위키백과 기사를 바탕으로 한 일종의 수동 추측입니다.교차 도메인 허용량을 사전 확인하는 더 좋은 방법이 있습니까?jQuery를 사용해도 됩니다.
실제로 아약스 방법을 사용하기 전에 URL에 동일한 오리진 정책이 적용되는지 "안전한" 방법이 있습니까?제가 가진 것은 다음과 같습니다.
function testSameOrigin(url) {
var loc = window.location,
a = document.createElement('a');
a.href = url;
return a.hostname == loc.hostname &&
a.port == loc.port &&
a.protocol == loc.protocol;
}
특정 작업을 수행하거나 수행하지 않는 경우 이 방법은 안전하고 신뢰할 수 있는 방법입니다.
이런 식으로 작동하지만, 위키백과 기사를 바탕으로 한 일종의 수동 추측입니다.
이것은 "정상적인" 상황에서 완전히 작동해야 합니다.도메인 간 스크립팅을 사용하려면 수정해야 합니다.
수정하는 경우document.domain
예를 들어 "foo.example.com " 및 "bar.example.com "에서 "example.com "로 스크립트에서testSameOrigin
함수가 반환됩니다.false
"http://example.com "의 경우, 실제로 반환되어야 합니다.true
.
수정할 예정인 경우document.domain
스크립트에 해당 항목에 대한 확인을 추가하기만 하면 됩니다.
교차 도메인 통신을 허용하기 위해 CORS(위 링크 참조)를 사용할 계획인 경우 잘못된 음수도 반환됩니다.그러나 CORS를 사용하는 경우 통신할 수 있는 도메인 목록이 표시되고 이 기능에 해당 목록을 추가할 수도 있습니다.
교차 도메인 허용량을 사전 확인하는 더 좋은 방법이 있습니까?jQuery를 사용해도 됩니다.
아마도 그렇지 않을 것입니다. Steve의 답변에서 콘솔에 표시되는 내용은 "관찰자의 딜레마"일 수도 있습니다.이러한 오류는 콘솔이 다른 창을 검사하려고 할 때 발생하는 것처럼 보이지만 반드시 스크립트에서 발생하는 것은 아닙니다.
만약 당신이 장난치지 않는다면,document.domain
또는 CORS를 사용하면 서버 사용 가능 여부를 확인하기 위해 추가 요청을 할 필요가 없으므로 원래 솔루션이 더 나을 수 있습니다.도메인 간 스크립팅을 수행하는 경우에도 현재 기능을 수정하여 이를 수용하는 것이 최선의 방법입니다.
흥미로운 질문입니다!검색해보니 당신이 올린 글 말고는 찾을 수 없었지만, 테스트 코드를 만지작거리다가 우연히 발견했습니다.요청하지 않고 URL을 테스트할 수 있는 간단한 방법을 원한다면, 저는 당신이 하는 방식으로 할 것입니다.테스트 요청이 필요 없는 경우 다음을 시도할 수 있습니다.
원하는 URL로 간단한 Ajax 요청:
var ajaxRequest = $.ajax({
url: 'http://www.google.com',
async: false
});
은 것은를반다니합환이▁a를 합니다.jqXHR
개체를 확인할 수 있습니다.
ajaxRequest.isRejected(); // or...
ajaxRequest.isResolved();
자, 이것에 대한 유일한 문제는isRejected()
평가할 것입니다.true
페이지가 로드되지 않는 모든 경우(예: 404 찾을 수 없음 등)에 대해 다음을 사용하여 상태 코드를 확인할 수 있습니다.
ajaxRequest.status;
위 라인이 되돌아올 것 같습니다.0
동일한 오리진 정책을 위반하려고 시도하지만 다른 경우에는 적절한 오류 코드(즉, 404)를 반환합니다.
마지막으로 다음과 같은 작업을 시도해 볼 수 있습니다.
function testSameOrigin(testUrl) {
var ajaxRequest = $.ajax({
url: testUrl,
async: false
});
return ajaxRequest.isRejected() && ajaxRequest.status === 0;
}
결코 확실한 답은 아니지만, 여러분이 무엇을 찾고 있는지 알아내는 데 도움이 되기를 바랍니다!
이 솔루션도 사용해 보십시오.
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
function sameOrigin(url) {
// test that a given url is a same-origin URL
// url could be relative or scheme relative or absolute
var host = window.document.location.host; // host + port
var protocol = window.document.location.protocol;
var srOrigin = '//' + host;
var origin = protocol + srOrigin;
// Allow absolute or scheme relative URLs to same origin
return (url === origin || url.slice(0, origin.length + 1) === origin + '/') ||
(url === srOrigin || url.slice(0, srOrigin.length + 1) === srOrigin + '/') ||
// or any other URL that isn't scheme relative or absolute i.e relative.
!(/^(\/\/|http:|https:).*/.test(url));
}
// if you want to check before you make a call
if (!csrfSafeMethod(data.type) && sameOrigin(data.url)) {
// ...
}
// or if you want to set csrf token
$.ajax({
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
xhr.setRequestHeader("X-CSRFToken", getCookie("csrftoken"));
}
}
});
교차 도메인 스크립트를 실행하는 또 다른 방법은 JSON-P를 사용하는 것입니다.이 기사를 읽을 수도 있습니다.그렇지 않으면 동일한 오리진 정책에서 교차 도메인 스크립팅이 허용되지 않습니다.
Dagg Nabbit의 대답을 바탕으로, 이것은 조금 더 완전한 것처럼 보입니다.
function sameOrigin(url) {
var loc = window.location, a = document.createElement('a')
a.href = url
return a.hostname === loc.hostname &&
a.port === loc.port &&
a.protocol === loc.protocol &&
loc.protocol !== 'file:'
}
내가 생각할 수 있는 주의 사항:
- document.domain을 고려하지 않습니다.
- CORS를 고려하지 않습니다.
- IE7에서 작동하지 않음(자노나가 언급한 바와 같이)
- 임의로 액세스할 수 있는 이상한 환경(안드로이드 등)에서는 작동하지 않습니다.
file://
프로토콜 경로(이를 확인하십시오. 안드로이드에 대한 정보가 오래되었을 수 있습니다. https://security.stackexchange.com/questions/25138/same-origin-policy-for-file-urls-in-android-browser)
언급URL : https://stackoverflow.com/questions/9404793/check-if-same-origin-policy-applies
'programing' 카테고리의 다른 글
Mac OS X에서 Python을 위한 좋은 IDE는 무엇입니까? (0) | 2023.08.01 |
---|---|
마리아의 교차 쿼리DB (0) | 2023.08.01 |
a.x 삭제 대 a.x = 정의되지 않음 (0) | 2023.08.01 |
ASP란 무엇입니까?요청에 해당하는 NET Core MVC.요청 URI? (0) | 2023.08.01 |
Android 카메라에서 서버로 비디오 스트리밍 (0) | 2023.08.01 |