2012 년 6 월 12 일 이후로 내 웹 사이트에서 요청 된 URL의 1 %에 "정의되지 않음"이 무작위로 추가됨


80

2012 년 6 월 12 일 11:20 TU 이후로 내 바니시 / 아파치 로그에 매우 이상한 오류가 표시됩니다.

때로는 사용자가 한 페이지를 요청했을 때 몇 초 후에 비슷한 요청이 표시되지만 URL의 마지막 / 뒤의 모든 문자열이 "정의되지 않음"으로 대체되었습니다.

예 : http://example.com/foo/barhttp://example.com/foo/undefined 요청을 트리거합니다 .

물론 이러한 "정의되지 않은"페이지는 존재하지 않고 대신 내 404 페이지가 반환됩니다 (클래식 apache 404가 아닌 표준 레이아웃이있는 사용자 정의 페이지).

  • 이것은 홈페이지에서 가장 깊은 페이지까지 모든 페이지에서 발생합니다.
  • 다양한 브라우저 (대부분 Chrome 19, 파이어 폭스 3.5 ~ 12, IE 8/9 ...)를 사용하지만 트래픽의 1 %에 불과합니다.
  • 이러한 요청에 의해 전송 된 헤더는 클래식 헤더이며 ajax 헤더가 없습니다.
  • 주어진 IP에 대해 이것은 무작위로 발생하는 것처럼 보입니다 : 때로는 방문한 첫 페이지에서, 때로는 방문 중 임의의 페이지에서, 때로는 방문 중 여러 페이지에서 ...

물론 자바 스크립트 문제처럼 보이지만 (Google에서 호스팅하는 jquery 1.7.2를 사용 하고 있습니다) 며칠 이후 js / html 또는 서버 구성에서 아무것도 변경 되지 않았으며 이전에 이런 종류의 오류를 본 적이 없습니다. . 물론 html에는 그러한 링크가 없습니다.

또한 몇 가지 흥미로운 사실을 발견했습니다.

  • 정의되지 않은 요청은 다른 페이지의 참조 자로 발견되지 않지만 대신 "실제"페이지가 동일한 IP의 다음 요청에 대한 참조 자로 사용되었습니다 (사용자는 404 페이지에서 클래식 메뉴를 사용할 수 있음).
  • Google Analytics에서 이러한 페이지의 흔적을 보지 못했기 때문에 자바 스크립트가 실행되지 않았다고 가정합니다 (404를 포함한 모든 페이지에 추적기가 존재 함).
  • 웹 사이트의 소셜 네트워크에서 문제를 제기 한 경우에도 아무도 이에 대해 문의하지 않았습니다.
  • 대부분의 사용자는 그 이후에도 계속 방문합니다.

이 모든 사실로 인해 브라우저에서 문제가 조용히 발생한다고 생각합니다. 아마도 버그가 많은 애드온, 바이러스 백신, 브라우저 바 또는 어제 업데이트 된 브라우저에 통합 된 형편없는 제조업체 소프트에 의해 유발되었을 것입니다 (하지만 출시 된 애드온을 찾지 못했습니다). 어제 크롬, 파이어 폭스, IE).

여기에있는 사람이 동일한 문제를 발견했거나 더 완전한 설명이 있습니까?


2
페이지의 일부 JavaScript 코드가 URL을 구성하고 있으며 하나 이상의 버그가 있습니다. 소프트웨어는 자체적으로 변경되지 않고 브라우저 업데이트, 날짜 / 시간에 대한 민감도, 세 번째 부분 스크립트 변경 등으로 인해 동작을 변경할 수 있습니다. 코드를 보지 않으면 정확히 무엇이 잘못되었는지 알 수 없습니다.
Pointy 2012-06-13

3
디버깅을위한 팁 / 아이디어 :-404 페이지에 "이 내용이 표시되면 x @ yz에 연락하여 여기에 도착한 방법을 설명해 주시겠습니까?"라는 명확한 메시지를 404 페이지에 배치하십시오 ( location.href.search("undefined")사실 인 경우에만 표시됨 ). -이메일이없고 모든 곳에서 jquery ajax를 사용하는 경우 반환 된 데이터가 JSON인지 여부와 data.undefinedError가 있는지 여부를 먼저 확인하는 사용자 지정 함수로 jquery ajax 호출을 래핑하고 존재하는 경우 어딘가에 기록합니다 (+ URL에있는 {undefinedError:true}경우 반환 되는 404 undefined).
데이비드 멀더

3
나도 이것을 경험하고 있으며 둘 다 봇이라고 생각하지 않습니다. / cache / xxxx 및 / undefined 둘 다 그러나 Chrome 19뿐만 아니라 IE 8 및 9도

3
6 월 12 일부터 {domain} / 정의되지 않은 오류도 발생했습니다. 내 사이트 (Google Analytics, 애드 센스 등)에서 모든 자바 스크립트를 제거하려고했지만 오류가 계속 나타납니다. 매일 그 수가 증가하고 있습니다. 거의 모든 오류는 다른 버전의 Chrome을 사용하는 사용자가 생성합니다. 일부 확장 기능 또는 추가 기능인 것 같지만 내 PC에서 복제 할 수 없습니다. 또한 / undefined를 포함하는 요청은 항상 모든 하위 요청 (이미지, css 등)과 함께 올바른 페이지 요청 후에 이어진다 고 언급했습니다
Almas

3
6 월 12 일에 시작된 또 다른 보고서 : productforums.google.com/forum/#!topic/chrome/G1snYHaHSOc
Dogweather

답변:


21

단순한 정답은 없습니다.

이것을 디버깅해야 할 것이고 URL의 '정의되지 않은'단어로 인해 아마도 JavaScript 일 것입니다. 그러나 AJAX 일 필요는 없으며 브라우저에 의해 자동으로 확인되는 URL을 생성하는 JavaScript 일 수 있습니다 (예 : 이미지 태그에 src 속성을 설정하는 JavaScript, css-image 속성 설정 등). 나는 대부분의 경우 Firebug가 설치된 Firefox 를 사용 하므로 내 지침을 염두에 두겠습니다.

Firebug 초기 설정

Firebug 사용 방법을 이미 알고있는 경우이 단계를 건너 뛰십시오.

Firefox for Firebug를 설치하고 다시 시작한 후에는 대부분의 Firebug '패널'을 활성화해야합니다. Firebug를 열려면 브라우저의 오른쪽 상단에 약간의 화재 버그 / 곤충 모양이 있거나 F12 키를 누를 수 있습니다. Firebug 탭 'Console', 'Script', 'Net'을 클릭하고이를 열고 패널의 정보를 읽어 활성화합니다. 제대로 작동하려면 페이지를 새로 고쳐야 할 수 있습니다.

사용자 상호 작용 디버깅

Firebug가 열려 있고 Net 패널이 활성화 된 문제가있는 페이지 중 하나로 이동합니다. Net 패널에는 'Clear', 'Persist', 'All', 'Html'등 몇 가지 옵션이 있습니다. ALL이 선택되어 있는지 확인하십시오. 페이지에서 아무 작업도하지 말고 페이지 위에 마우스를 올려 놓지 마십시오. 요청을 살펴보십시오. 잘못된 URL에 대한 요청은 빨간색이며 404 찾을 수 없음 (또는 유사) 상태 일 수 있습니다.

로드시 보십니까? 다음 부분으로 건너 뜁니다.

초기로드시 보이지 않습니까? 페이지 사용을 시작하고 여기에서 계속하십시오.

모든 기능을 클릭하고 모든 항목 위에 마우스를 올려 놓으십시오. Net 패널을 계속 주시하고 실패한 요청을 확인하십시오. 창의적이어야 할 수도 있지만 브라우저가 잘못된 요청을 할 때까지 애플리케이션을 계속 사용하십시오. 페이지가 많은 요청을하는 경우 Net 패널의 왼쪽 상단에있는 'Clear'버튼을 눌러서 조금 정리하십시오.

페이지를 제출하고 실패한 요청이 매우 빨리 나가지 만 다음 페이지가로드되어 손실되는 경우 Net 패널의 왼쪽 상단에있는 'Persist'를 클릭하여 지속성을 활성화하십시오.

일단 그렇게되면, 그렇게하기 위해 무엇을했는지 고려하십시오. 다시 일어날 수 있는지 확인하십시오. 어떤 사용자 상호 작용이 발생하는지 파악한 후 해당 코드를 살펴보고 잘못된 요청을 만드는 항목을 찾습니다.

스크립트 탭을 사용하여 JavaScript에서 중단 점을 설정하고 단계별로 실행할 수 있습니다. $ (elemment) .bind / click / focus / etc를 통해 또는 onclick = ""/ onfocus = ""등과 같은 구식 이벤트 속성에서 수행 된 이벤트 핸들러를 조사하십시오.

페이지가로드되는 즉시 요청이 발생하는 경우

이것은 고정하기가 조금 더 어려울 것입니다. 스크립트 탭으로 이동하여로드시 실행되는 모든 스크립트에 중단 점 추가를 시작해야합니다. 자바 스크립트 줄의 왼쪽을 클릭하면됩니다.

페이지를 새로 고침하면 중단 점이 브라우저에서 페이지를로드하지 못하도록합니다. 스크립트 패널에서 '계속'버튼을 누릅니다. 인터넷 패널로 이동하여 요청이 이루어 졌는지 확인하고 찾을 때까지 계속하십시오. 이를 사용하여 점점 더 많은 중단 점을 천천히 추가 한 다음 함수에 들어갔다 나오면 요청이 발생하는 위치를 좁힐 수 있습니다.

코드에서 찾고있는 것

다음과 유사한 것 :

var url = workingUrl + someObject['someProperty'];

var url = workingUrl + someObject.someProperty;

someObject는 object {}, array []또는 내부 브라우저 유형 중 하나 일 수 있습니다. 요점은 존재하지 않는 속성에 액세스한다는 것입니다.

404 / 빨간색 요청이 보이지 않습니다.

그런 다음 원인이 무엇이든 테스트에 의해 트리거되지 않습니다. 더 많은 것을 사용해보십시오. 요점은 어떻게 든 요청을 할 수 있어야한다는 것입니다. 당신은 아직 모릅니다. Net 패널에 표시되어야합니다. 그렇지 않은 유일한 시간은 트리거를 유발하는 작업을 수행하지 않을 때입니다.

결론

정확히 무슨 일이 벌어지고 있는지에 대한 아주 쉬운 방법은 없습니다. 그러나 내가 설명한 방법을 사용하면 최소한 가까이 다가 갈 수 있어야합니다. 아마도 당신이 고려하지도 않은 것입니다.


1
응답 해 주셔서 감사합니다. 나는 이미 방화범으로 이것을 검사하고 성공하지 못한 채 내 IP에 내 바니시 / 아파치가 기록하는 것을 보았습니다. 이러한 "정의되지 않은"요청은 모든 html 요청의 1 % 미만을 나타내며 모든 유형의 페이지가 관련되어 있으므로 트리거하기가 정말 어렵습니다. 그러나 다음 주에는 다른 브라우저를 사용하여 다시 시도하고 말씀하신대로 이벤트 핸들러에 대해 더 자세히 조사하겠습니다. 감사!
colinux

나는 그것이 단지와 같은 것일 가능성이 더 높으며 var url = omeObject['usuallyAURL'];요청 된 자산의 src 또는 href로 설정되어 상대 경로 요청으로 처리됩니다. 즉,<img src="undefined" />
Yahel

17

게시물을 기반으로 "Complitly"Chrome 플러그인 / 멀웨어를 리버스 엔지니어링했으며이 확장 프로그램이 NAME 또는 "검색", "q"등의 ID입니다.

또한 enable.js 파일 (컴플리트 파일 중 하나)이 "suggestmeyes_loaded"라는 전역 변수를 확인하여 이미로드되었는지 확인했습니다 (예 : Singleton). 따라서이 변수를 false로 설정하면 플러그인이 비활성화됩니다.

멀웨어를 비활성화하고 "정의되지 않은"요청을 중지하려면 사이트에 검색 필드가있는 모든 페이지에이를 적용하십시오.

<script type="text/javascript">
    window.suggestmeyes_loaded = true;
</script>

또한이 악성 코드는 사용자를 "searchcompletion.com"사이트로 리디렉션하여 때때로 경쟁 업체에 ADS를 표시합니다. 그래서 진지하게 받아 들여야합니다.


내 로그에서도 JS가 될 수없는 페이지를보고 있습니다. 나는 당신이 100 % 정확하다고 믿습니다. 멀웨어가이 변수의 이름을 변경하기까지 얼마나 걸릴지 궁금합니다.
Lawrence Dol 2013

제 경우에는 꽤 그럴듯하게 들립니다. 한 가지 예외 : 요청 된 URL : / ForSale / beach_front_property / bronx / undefined / 사용자 에이전트 : Mozilla / 5.0 (호환 가능; Googlebot / 2.1; + google.com/bot.html ) Googlebot이 왜 그것을 찾아서 따라야하는지 확실하지 않습니다. 그들이 어딘가에서 URL을 감지하고 가서 보러 갔다면. 그러나 봇은 올바른 참조 URL을 말한다
크리스 Sattinger에게

다른 예외 : 사용자 에이전트 : Opera / 9.80 (Windows NT 5.1) Presto / 2.12.388 버전 /12.16 Opera에서도 Complitly를 사용할 수 없습니다. Linux, Android 및 NT가 많이 있습니다
Chris Sattinger 2013 년

@felix Googlebot이 URL에 대해 배우는 한 곳은 브라우저가 "집에 전화를 걸 때"Chrome 사용자로부터입니다.
Izkata 2011

8

undefinedJavaScript 문제와 관련 이 있음을 올바르게 설정했으며 사이트 사용자가 오류 페이지 표시에 대해 불만을 제기하지 않은 경우 다음을 확인할 수 있습니다.

JavaScript가 이미지 위치를 설정하거나 변경하는 데 사용되는 경우 때때로이 undefinedURI로 이동합니다.

이 경우 브라우저는 기꺼이 이미지를로드하려고 시도하지만 (AJAX 헤더 없음) 힌트를 남깁니다 Accept:. 특정 헤더를 설정합니다 . 대신 text/html, text/xml, ...그것을 사용합니다 image/jpeg, image/png, ....

이러한 헤더가 확인되면 문제를 이미지로만 좁혔습니다. 근본 원인을 찾는 데 시간이 걸릴 수 있습니다. :)

최신 정보

디버깅을 돕기 위해 $.fn.attr()무언가가 undefined에 할당 될 때 디버거를 재정의 하고 호출 할 수 있습니다 . 이 같은:

​(function($, undefined) {
    var $attr = $.fn.attr;

    $.fn.attr = function(attributeName, value) {
        var v = attributeName === 'src' ? value : attributeName.src;

        if (v === 'undefined') {
            alert("Setting src to undefined");
        }

        return $attr(attributeName, value);
    }
}(jQuery));

당신 말이 맞아요, 헤더 덕분에 단서를 가질 수있었습니다. Chrome 요청 일 때 헤더는 (댓글의 형식 Host: statistiks.fr User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5 Accept: */* Referer: http://statistiks.fr/basket-ball/[..] Accept-Encoding: gzip,deflate,sdch [...] 이 잘못되어 죄송합니다) 하지만 IE9에서는 Accept 헤더가 이미지를 참조합니다. Accept: image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5 다음 주에 이미지 측면에서 조사하는 데 시간을 할애하겠습니다. 감사!
colinux

@colinux 문제를 쉽게 찾을 수 있도록 답변을 업데이트했습니다. 적용하는 데 문제가 있으면 알려주세요.

3

특히이 스레드에서 확인 된 몇 가지 사실 : http://productforums.google.com/forum/#!msg/chrome/G1snYHaHSOc/p8RLCohxz2kJ

자바 스크립트가 전혀없는 페이지에서 발생합니다. 이것은 페이지 프로그래밍 오류가 아님을 증명합니다.

사용자는 문제를 인식하지 못하고 계속해서 매우 즐겁게 탐색합니다.

사용자가 페이지를 방문한 후 몇 초 후에 발생합니다.

모든 사람에게 일어나는 일은 아닙니다.

여러 브라우저 (Chrome, IE, Firefox, Mobile Safari, Opera)에서 발생

여러 운영 체제 (Linux, Android, NT)에서 발생

여러 웹 서버 (IIS, Nginx, Apache)에서 발생

링크를 따라 가면서 동일한 리퍼러를 주장하는 googlebot 사례가 하나 있습니다. 그들은 단지 영리 해 지려고 할 수 있으며 브라우저는 그것을 조사하기 위해 봇을 만든 모선에게 전달했습니다.

나는 그것이 플러그인에 의한 것이라는 제안에 상당히 확신합니다. Complitly는 하나이지만 Opera를 지원하지 않습니다. 다른 것들이 많이 있습니다.

모바일 브라우저는 플러그인 이론에 반합니다.

시스템 관리자는 Complitly가 이미 초기화되었다고 생각하도록 속이기 위해 페이지에 일부 자바 스크립트를 추가하여 대폭 하락했다고보고했습니다.

nginx에 대한 내 솔루션은 다음과 같습니다.

location ~ undefined/?$  {
  return 204;
}

그러면 "좋아요,하지만 콘텐츠가 없습니다"가 반환됩니다.

website.com/some/page에 있고 (어쨌든) website.com/some/page/undefined로 이동하면 브라우저는 URL이 변경된 것으로 표시하지만 페이지를 다시로드하지 않습니다. 이전 페이지는 창에 그대로 유지됩니다.

어떤 이유로 이것이 사용자가 경험 한 것이라면 깨끗한 noop 경험을 갖게 될 것이며 그들이 무엇을 하던지 방해하지 않을 것입니다.


귀하의 솔루션은 분명히 이것의 낙진으로부터 저를 구했습니다. 브라우저가 혼합 콘텐츠 (ssl 및 일반)에 대해 불평하고 있었는데 이제이 문제가 해결되었습니다. 감사합니다.
Moritz 2014

2

이것은 변수가 사용되기 전에 제대로 초기화되지 않는 경쟁 조건처럼 들립니다. 귀하의 의견에 따르면 이것이 AJAX 문제가 아니라는 점을 고려할 때 아래에 나열된 몇 가지 방법이 있습니다.

자바 스크립트 예외 로거 연결 : 로그에서 거의 모든 임의의 자바 스크립트 예외를 포착하는 데 도움이됩니다. 대부분의 경우 프로그래밍 방식 오류가 여기에 표시됩니다. 스크립트 앞에 넣으십시오. 서버에서이를 포착하고 나중에 분석 할 수 있도록 로그에 인쇄해야합니다. 이것이 당신의 첫 번째 방어선입니다. 다음은 그 예입니다.

window.onerror = function(m,f,l) {
    var e = window.encodeURIComponent;
    new Image().src = "/jslog?msg=" + e(m) + "&filename=" + e(f) + "&line=" + e(l) + "&url=" + e(window.location.href);
};

window.location 검색 : 이러한 각 인스턴스에 대해 로깅을 추가하거나 window.location에 정의되지 않은 연결 / 추가를 확인해야합니다. 예를 들면 :

function myCode(loc) {
    // window.location.href = loc; // old 
    typeof loc === 'undefined' && window.onerror(...); //new
    window.location.href = loc; //new
}

또는 약간 더 깨끗한 :

window.setLocation = function(url) { 
   /undefined/.test(url) ? 
         window.onerror(...) : window.location.href = url;       
}

function myCode(loc) {
    //window.location.href = loc; //old
    window.setLocation(loc); //new
} 

이 단계에서 스택 트레이스를 얻는 데 관심이 있다면 https://github.com/eriwen/javascript-stacktrace를 살펴보십시오.

처리되지 않은 모든 정의되지 않은 링크 잡기 : window.location 외에 남은 것은 DOM 링크 자체뿐입니다. 세 번째 단계는 잘못된 URL 패턴에 대해 처리되지 않은 모든 DOM 링크를 확인하는 것입니다 (jQuery가로드를 마친 후 바로 첨부 할 수 있습니다.

$("body").on("click", "a[href$='undefined']", function() {
    window.onerror('Bad link: ' + $(this).html()); //alert home base
});

이것이 도움이되기를 바랍니다. 행복한 디버깅.


1

이것이 adblocker 문제인지 궁금합니다. IP 주소로 로그를 검색하면 특정 사용자가 /folder/page.html에 대한 모든 요청 뒤에 / folder / undefined에 대한 요청이 뒤 따르는 것처럼 보입니다.


나는 이것이 클라이언트의 소프트웨어와도 관련이 있다고 생각합니다. 최근 로그에 따르면 이는 특정 IP 주소에 대해서만 발생하며 해당 주소에서도 일관되게 발생하는 것으로 보입니다. 사용자 에이전트 문자열에 BTRS123368 및 AskTbORJ / 5.15.2.23037이 표시됩니다. 아마도 그 중 하나와 관련이있을 수 있습니다.
Jorrit Schippers 2013

더 많은 결과를 얻었습니다. 사용자 에이전트에 FunWebProducts를 가진 누군가가 / undefined URL을 요청하고 있습니다.
Jorrit Schippers 2013

0

이것이 도움이되는지 모르겠지만 내 웹 사이트는 여러 브라우저에로드 된 후 특정 * .webp 이미지 파일을 undefined로 대체하고 있습니다. 사이트가 webp 이미지를 호스팅하고 있습니까?


0

/null@ andrew-martinez의 답변이 해결하는 데 도움 이 된 비슷한 문제가 있었지만 콘솔에 404 오류가 있습니다.

imgsrc필드 가있는 태그를 사용하고있는 것으로 나타났습니다 .

<img src="" alt="My image" data-src="/images/my-image.jpg">

내 생각은 javascript (lazy loading)로 data-src 속성의 src 속성을 설정하여 나중에 수동으로로드하기 위해 페이지로드시 브라우저에서 이미지를로드하지 못하게하는 것이 었습니다. 그러나 iDangerous Swiper와 함께 사용하면이 방법으로 오류가 발생했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.