"Không xác định" được thêm ngẫu nhiên vào 1% url được yêu cầu trên trang web của tôi kể từ ngày 12 tháng 6 năm 2012


80

Kể từ ngày 12 tháng 6 năm 2012 11:20 TU, tôi thấy các lỗi rất khác thường trong nhật ký véc ni / apache của mình.

Đôi khi, khi người dùng đã yêu cầu một trang, vài giây sau tôi thấy một yêu cầu tương tự nhưng tất cả chuỗi sau url cuối cùng / trong url đã được thay thế bằng "undefined".

Ví dụ: http://example.com/foo/bar kích hoạt một http://example.com/foo/undefined yêu cầu.

Tất nhiên, các trang "không xác định" của luận án không tồn tại và trang 404 của tôi được trả lại thay thế (là trang tùy chỉnh với bố cục tiêu chuẩn, không phải apache 404 cổ điển)

  • Điều này xảy ra với bất kỳ trang nào (từ trang chủ đến trang sâu nhất)
  • với nhiều trình duyệt khác nhau, (chủ yếu là Chrome 19, nhưng cũng có firefox 3.5 đến 12, IE 8/9 ...) nhưng chỉ chiếm 1% của trafic.
  • Các tiêu đề được gửi theo yêu cầu này là tiêu đề cổ điển (và không có tiêu đề ajax).
  • Đối với một ip nhất định, điều này dường như xảy ra ngẫu nhiên: đôi khi ở trang đầu tiên được truy cập, đôi khi trên một trang ngẫu nhiên trong khi truy cập, đôi khi một vài trang trong khi truy cập ...

Tất nhiên, nó trông giống như một vấn đề javascript (tôi đang sử dụng jquery 1.7.2 được lưu trữ bởi google), nhưng tôi hoàn toàn không có gì thay đổi trong js / html hoặc cấu hình máy chủ kể từ vài ngày và tôi chưa bao giờ thấy loại lỗi này trước đây . Và tất nhiên, không có liên kết như vậy trong html.

Tôi cũng nhận thấy một số sự kiện thú vị:

  • các yêu cầu không xác định không bao giờ được tìm thấy dưới dạng tham chiếu của các trang khác, mà thay vào đó, các trang "thực" được sử dụng làm tham chiếu cho yêu cầu sau của cùng một IP (người dùng có thể sử dụng menu cổ điển trên trang 404)
  • Tôi không thấy bất kỳ dấu vết nào của các trang này trong Google Analytics, vì vậy tôi cho rằng không có javascript nào được thực thi (trình theo dõi tồn tại trên tất cả các trang bao gồm 404)
  • không ai liên hệ với chúng tôi về điều này, ngay cả khi tôi đã nêu ra vấn đề trên mạng xã hội của trang web
  • hầu hết người dùng tiếp tục truy cập sau đó

Tất cả các sự kiện của luận án khiến tôi nghĩ rằng vấn đề xảy ra âm thầm trong trình duyệt, có thể được kích hoạt bởi một tiện ích bổ sung có lỗi, phần mềm chống vi-rút, thanh trình duyệt hoặc phần mềm của nhà sản xuất tồi được tích hợp trong các trình duyệt được cập nhật hôm qua (nhưng tôi không tìm thấy bất kỳ tiện ích bổ sung nào được phát hành ngày hôm qua cho chrome, firefox và IE).

Có ai ở đây đã nhận thấy cùng một vấn đề, hoặc có lời giải thích đầy đủ hơn không?


2
Một số mã JavaScript trên các trang của bạn đang tạo URL và nó có một hoặc nhiều lỗi. Phần mềm, nếu không tự thay đổi, có thể thay đổi hành vi do cập nhật trình duyệt, độ nhạy với ngày / giờ, thay đổi tập lệnh phần thứ 3, v.v. Nếu không nhìn thấy mã, sẽ không thể biết chính xác điều gì đang xảy ra.
Pointy

3
Chỉ là một mẹo / ý tưởng để gỡ lỗi: - Đặt một thông báo rõ ràng trên trang 404 của bạn với các chữ cái khá lớn "Nếu bạn thấy điều này, bạn có thể vui lòng liên hệ với x @ yz để mô tả cách bạn đến đây" (có thể chỉ được hiển thị nếu location.href.search("undefined")là sự thật). - Nếu không có email nào và bạn sử dụng jquery ajax ở mọi nơi, hãy bọc lệnh gọi jquery ajax trong một hàm tùy chỉnh, trước tiên sẽ kiểm tra xem dữ liệu trả về có phải là JSON hay không và data.undefinedError có tồn tại hay không và nếu nó tồn tại, hãy ghi lại nó ở đâu đó (+ tạo kiểm tra trong 404 trả về {undefinedError:true}nếu có undefinedtrong url).
David Mulder

3
Tôi cũng đang trải qua điều này và không nghĩ rằng đó là một bot. Cả / cache / xxxx và / undefined Tuy nhiên nó không chỉ là Chrome 19, mà còn IE 8 và 9.

3
Tôi cũng gặp phải lỗi {domain} / không xác định kể từ ngày 12 tháng 6. Tôi đã cố gắng xóa TẤT CẢ javascript khỏi trang web của mình (google analytics, adsense, v.v.), nhưng lỗi vẫn xuất hiện. Mỗi ngày số lượng trong số họ đang tăng lên. Hầu hết tất cả các lỗi đều do người dùng sử dụng Chrome của các phiên bản khác nhau tạo ra. Tôi nghi ngờ rằng đó là một số tiện ích mở rộng hoặc bổ trợ, nhưng không thể tái tạo trên máy tính của riêng tôi. Tôi cũng đã đề cập rằng yêu cầu chứa / không xác định luôn được tuân theo sau yêu cầu trang chính xác với tất cả các yêu cầu phụ (hình ảnh, css, v.v.)
Almas

3
Một báo cáo khác, còn là nó bắt đầu vào ngày 12 tháng 6: productforums.google.com/forum/#!topic/chrome/G1snYHaHSOc
Dogweather

Câu trả lời:


21

Không có câu trả lời đơn giản.

Bạn sẽ phải gỡ lỗi điều này và nó có thể là JavaScript do từ 'không xác định' trong URL. Tuy nhiên, nó không nhất thiết phải là AJAX, nó có thể là JavaScript tạo bất kỳ URL nào được trình duyệt tự động phân giải (ví dụ: JavaScript đặt thuộc tính src trên thẻ hình ảnh, đặt thuộc tính css-image, v.v.). Tôi sử dụng Firefox với Firebug được cài đặt hầu hết thời gian, vì vậy chỉ đường của tôi sẽ lưu ý đến điều đó.

Thiết lập ban đầu Firebug

Bỏ qua điều này nếu bạn đã biết cách sử dụng Firebug.

Sau khi cài đặt và khởi động lại Firefox cho Firebug, bạn sẽ phải bật hầu hết các 'bảng điều khiển' của Firebug. Để mở Firebug, sẽ có một con bọ lửa / côn trùng nhỏ ở góc trên cùng bên phải của trình duyệt hoặc bạn có thể nhấn F12. Nhấp qua các tab Firebug 'Console', 'Script', 'Net' và bật chúng bằng cách mở chúng ra và đọc thông tin của bảng điều khiển. Bạn có thể phải làm mới trang để chúng hoạt động bình thường.

Gỡ lỗi tương tác của người dùng

Điều hướng đến một trong các trang có sự cố với Firebug đang mở và bảng Net đang hoạt động. Trong bảng điều khiển Net sẽ có một vài tùy chọn: 'Clear', 'Persist', 'All', 'Html', v.v. Đảm bảo rằng ALL được chọn. Đừng làm bất cứ điều gì trên trang và cố gắng không di chuột qua bất kỳ thứ gì trên đó. Xem qua các yêu cầu. Yêu cầu cho URL không hợp lệ sẽ có màu đỏ và có thể có trạng thái 404 Không tìm thấy (hoặc tương tự).

Xem nó khi tải? Chuyển sang phần tiếp theo.

Không thấy nó khi tải ban đầu? Bắt đầu sử dụng trang của bạn và tiếp tục ở đây.

Bắt đầu nhấp vào mọi tính năng, di chuột qua mọi thứ, v.v. Hãy để mắt đến bảng điều khiển Net và theo dõi các yêu cầu không thành công. Bạn có thể phải sáng tạo, nhưng hãy tiếp tục sử dụng ứng dụng của mình cho đến khi bạn thấy trình duyệt của mình đưa ra yêu cầu không hợp lệ. Nếu trang đưa ra nhiều yêu cầu, vui lòng nhấn vào nút 'Xóa' ở trên cùng bên trái của bảng điều khiển Net để xóa nó một chút.

Nếu bạn gửi trang và thấy một yêu cầu không thực hiện được thực sự nhanh chóng nhưng sau đó bị mất vì trang tiếp theo tải, hãy kích hoạt tính năng duy trì bằng cách nhấp vào 'Persist' ở trên cùng bên trái của bảng Net.

Một khi nó xảy ra, và cần phải xem xét những gì bạn đã làm để biến điều đó thành hiện thực. Xem liệu bạn có thể làm cho nó xảy ra một lần nữa không. Sau khi bạn tìm ra tương tác của người dùng đang tạo ra điều gì, hãy đi sâu vào mã đó và bắt đầu tìm kiếm những thứ đang đưa ra yêu cầu không hợp lệ.

Bạn có thể sử dụng tab Tập lệnh để thiết lập các điểm ngắt trong JavaScript của mình và bước qua chúng. Điều tra các trình xử lý sự kiện được thực hiện qua $ (elemment) .bind / click / focus / etc hoặc từ các thuộc tính sự kiện của trường cũ như onclick = "" / onfocus = "", v.v.

Nếu yêu cầu xảy ra ngay khi tải trang

Điều này sẽ khó hơn một chút để chốt. Bạn sẽ cần phải chuyển đến tab Tập lệnh và bắt đầu thêm các điểm ngắt vào mỗi tập lệnh chạy khi tải. Bạn thực hiện việc này bằng cách nhấp vào phía bên trái của dòng JavaScript.

Tải lại trang của bạn và các điểm ngắt của bạn sẽ ngăn trình duyệt tải trang. Nhấn nút 'Tiếp tục' trên bảng kịch bản. Truy cập bảng điều khiển mạng của bạn và xem liệu yêu cầu của bạn có được thực hiện hay không, tiếp tục cho đến khi tìm thấy nó. Bạn có thể sử dụng điều này để thu hẹp nơi yêu cầu được thực hiện bằng cách từ từ thêm ngày càng nhiều điểm ngắt và sau đó bước vào và ra khỏi các chức năng.

Những gì bạn đang tìm kiếm trong mã của bạn

Một cái gì đó tương tự như sau:

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

var url = workingUrl + someObject.someProperty;

Hãy nhớ rằng someObject có thể là một đối tượng {}, một mảng []hoặc bất kỳ loại trình duyệt nội bộ nào. Vấn đề là một thuộc tính sẽ được truy cập không tồn tại.

Tôi không thấy bất kỳ yêu cầu 404 / đỏ nào

Sau đó, bất cứ điều gì gây ra nó sẽ không được kích hoạt bởi các thử nghiệm của bạn. Hãy thử sử dụng nhiều thứ hơn. Vấn đề là bạn có thể thực hiện yêu cầu bằng cách nào đó. Bạn chỉ chưa biết. Nó phải hiển thị trong bảng Net. Lần duy nhất nó sẽ không xảy ra khi bạn không làm bất cứ điều gì gây ra nó.

Phần kết luận

Không có cách nào siêu dễ dàng để chốt lại chính xác những gì đang diễn ra. Tuy nhiên, sử dụng các phương pháp tôi đã nêu, ít nhất bạn sẽ có thể đến gần. Nó có thể là một cái gì đó bạn thậm chí không xem xét.


1
Cám ơn phản hồi của bạn. Tôi đã thử kiểm tra điều này bằng firebug và bằng cách xem nhật ký varnish / apache trên ip của mình, nhưng không thành công. Các yêu cầu "không xác định" của đề tài này đại diện cho ít hơn 1% tất cả các yêu cầu html và tất cả các loại trang đều có liên quan, vì vậy rất khó để kích hoạt chúng. Nhưng tuần sau, tôi sẽ thử lại, với các trình duyệt khác nhau và tôi sẽ điều tra sâu hơn về các trình xử lý sự kiện như bạn đã nói. Cảm ơn!
colinux

Tôi cá rằng có nhiều khả năng đó chỉ là một cái gì đó giống như vậy var url = omeObject['usuallyAURL'];và được đặt làm src hoặc href của một số nội dung được yêu cầu và do đó được coi là một yêu cầu đường dẫn tương đối. tức là,<img src="undefined" />
Yahel

17

Dựa trên bài đăng này , tôi đã thiết kế ngược Plugin / phần mềm độc hại của Chrome "Tuân thủ" và nhận thấy rằng tiện ích mở rộng này đang đưa vào một tính năng "tự động hoàn thành được cải tiến" đang đưa ra các yêu cầu "không xác định" tại mọi trang web có trường văn bản đầu vào với NAME hoặc ID của "tìm kiếm", "q" và nhiều ID khác.

Tôi cũng nhận thấy rằng tệp enable.js (một trong các tệp phàn nàn) đang kiểm tra một biến toàn cục có tên "suggestmeyes_loaded" để xem nó đã được tải chưa (giống như Singleton). Vì vậy, đặt biến này thành false sẽ vô hiệu hóa plugin.

Để vô hiệu hóa phần mềm độc hại và dừng các yêu cầu "không xác định", hãy áp dụng điều này cho mọi trang có trường tìm kiếm trên trang web của bạn:

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

Phần mềm độc hại này cũng chuyển hướng người dùng của bạn đến trang web "searchcompletion.com", đôi khi hiển thị QUẢNG CÁO của đối thủ cạnh tranh. Vì vậy, nó cần được xem xét một cách nghiêm túc.


Tôi cũng thấy điều này trong nhật ký của mình, với các trang mà nó không thể là JS; Tôi tin rằng bạn đúng 100%. Mặc dù tôi tự hỏi sẽ mất bao lâu trước khi phần mềm độc hại thay đổi tên của biến này.
Lawrence Dol

nghe khá hợp lý trong trường hợp của tôi. một ngoại lệ: URL được yêu cầu: / ForSale / beach_front_property / bronx / undefined / Tác nhân người dùng: Mozilla / 5.0 (tương thích; Googlebot / 2.1; + google.com/bot.html ) không chắc tại sao googlebot lại tìm và theo dõi điều đó. trừ khi họ phát hiện ra URL ở đâu đó và đi xem. nhưng bot khẳng định một url giới thiệu đúng
Chris Sattinger

một ngoại lệ: Tác nhân người dùng: Opera / 9.80 (Windows NT 5.1) Presto / 2.12.388 Version / 12,16 Complitly không có sẵn cho Opera Tôi cũng thấy rất nhiều của Linux, Android, và NT
Chris Sattinger

@felix Một nơi Googlebot tìm hiểu về URL là từ người dùng Chrome khi trình duyệt "điện thoại về nhà"
Izkata

8

Bạn đã xác định chính xác rằng undefinedvấn đề liên quan đến sự cố JavaScript và nếu người dùng trang web của bạn không phàn nàn về việc nhìn thấy các trang lỗi, bạn có thể kiểm tra phần sau.

Nếu JavaScript được sử dụng để đặt hoặc thay đổi các vị trí hình ảnh, đôi khi xảy ra trường hợp một undefinedđường vào URI.

Khi điều đó xảy ra, trình duyệt sẽ vui vẻ cố gắng tải hình ảnh (không có tiêu đề AJAX), nhưng nó sẽ để lại gợi ý: nó đặt một Accept:tiêu đề cụ thể ; thay vì text/html, text/xml, ...nó sẽ sử dụng image/jpeg, image/png, ....

Khi tiêu đề như vậy được xác nhận, bạn đã thu hẹp vấn đề chỉ với hình ảnh. Tuy nhiên, việc tìm ra nguyên nhân gốc rễ có thể sẽ mất một thời gian :)

Cập nhật

Để giúp gỡ lỗi, bạn có thể ghi đè $.fn.attr()và gọi trình gỡ lỗi khi một thứ gì đó đang được gán cho không xác định. Một cái gì đó như thế này:

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

Bạn nói đúng, tôi có thể dẫn đầu nhờ tiêu đề. Khi đó là một yêu cầu của Chrome, tiêu đề là (xin lỗi vì định dạng xấu trong nhận xét) 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 [...] Nhưng với IE9, tiêu đề Chấp nhận tham chiếu đến một hình ảnh: Accept: image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5 Tuần tới, tôi sẽ dành thời gian để điều tra về mặt hình ảnh. Cảm ơn!
colinux

@colinux Tôi đã cập nhật câu trả lời của mình để giúp bạn tìm ra vấn đề dễ dàng hơn. Hãy cho tôi biết nếu bạn gặp bất kỳ vấn đề nào khi áp dụng điều đó.
Ja͢ck

3

Một số dữ kiện đã được thiết lập, đặc biệt là trong chuỗi này: http://productforums.google.com/forum/#!msg/chrome/G1snYHaHSOc/p8RLCohxz2kJ

nó xảy ra trên các trang không có javascript. điều này chứng tỏ rằng đó không phải là lỗi lập trình trên trang

người dùng không biết về sự cố và tiếp tục duyệt khá vui vẻ.

nó xảy ra một vài giây sau khi người đó truy cập trang.

nó không xảy ra với tất cả mọi người.

xảy ra trên nhiều trình duyệt (Chrome, IE, Firefox, Mobile Safari, Opera)

xảy ra trên nhiều hệ điều hành (Linux, Android, NT)

xảy ra trên nhiều máy chủ web (IIS, Nginx, Apache)

Tôi có một trường hợp googlebot theo liên kết và xác nhận cùng một liên kết giới thiệu. Có thể họ chỉ đang cố tỏ ra thông minh và trình duyệt đã thông báo điều đó với bộ phận làm mẹ, người sau đó đặt ra một bot để điều tra.

Tôi khá thuyết phục bởi đề xuất rằng nó là do các plugin gây ra. Complitly là một, nhưng điều đó không hỗ trợ Opera. Có nhiều người khác.

Mặc dù các trình duyệt dành cho thiết bị di động vẫn chống lại lý thuyết plugin.

Sysadmins đã báo cáo sự sụt giảm nghiêm trọng bằng cách thêm một số javascript trên trang để đánh lừa Complitly nghĩ rằng nó đã được khởi tạo.

Đây là giải pháp của tôi cho nginx:

location ~ undefined/?$  {
  return 204;
}

Điều này trả về "vâng được, nhưng không có nội dung cho bạn".

Nếu bạn đang truy cập website.com/some/page và bạn (bằng cách nào đó) điều hướng đến website.com/some/page/undefined, trình duyệt sẽ hiển thị URL như đã thay đổi nhưng thậm chí sẽ không tải lại trang. Trang trước sẽ giữ nguyên như trong cửa sổ.

Nếu vì lý do nào đó mà người dùng đã trải qua điều này thì họ sẽ có trải nghiệm noop rõ ràng và nó sẽ không làm phiền bất cứ điều gì họ đang làm.


Giải pháp của bạn chắc chắn đã cứu tôi khỏi sự thất bại của việc này. Trình duyệt đã phàn nàn về nội dung hỗn hợp (ssl và đơn giản), bây giờ điều này đã được giải quyết, cảm ơn bạn.
Moritz

2

Điều này giống như một điều kiện chạy đua trong đó một biến không được khởi tạo đúng cách trước khi được sử dụng. Theo nhận xét của bạn, xem đây không phải là vấn đề AJAX, sẽ có một số cách để tìm ra vấn đề này, được liệt kê bên dưới.

Kết nối một Trình ghi ngoại lệ Javascript : điều này sẽ giúp bạn nắm bắt tất cả các ngoại lệ javascript ngẫu nhiên trong nhật ký của bạn. Hầu hết các lỗi lập trình sẽ xuất hiện ở đây. Đặt nó trước bất kỳ tập lệnh nào. Bạn sẽ cần nắm bắt những thông tin này trên máy chủ và in chúng vào nhật ký của mình để phân tích sau này. Đây là tuyến phòng thủ đầu tiên của bạn. Đây là một ví dụ:

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

Tìm kiếm window.location : đối với mỗi trường hợp này, bạn nên thêm ghi nhật ký hoặc kiểm tra các nối / phần phụ không xác định vào window.location của mình. Ví dụ:

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

hoặc sạch hơn một chút:

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
} 

Nếu bạn quan tâm đến việc nhận stacktrace ở giai đoạn này, hãy xem tại: https://github.com/eriwen/javascript-stacktrace

Lấy tất cả các liên kết không xác định chưa được xử lý : Bên cạnh window.location Điều duy nhất còn lại là các liên kết DOM. Bước thứ ba là kiểm tra tất cả các liên kết DOM không hợp lệ để tìm mẫu URL không hợp lệ của bạn (bạn có thể đính kèm điều này ngay sau khi jQuery tải xong, sớm hơn thì tốt hơn):

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

Hy vọng điều này là hữu ích. Chúc bạn gỡ lỗi vui vẻ.


1

Tôi tự hỏi liệu đây có thể là vấn đề về trình chặn quảng cáo. Khi tôi tìm kiếm trong các nhật ký theo địa chỉ IP, có vẻ như mọi yêu cầu của một người dùng cụ thể tới /folder/page.html đều được theo sau bởi một yêu cầu đến / folder / undefined


Tôi nghĩ điều này cũng liên quan đến phần mềm trên máy khách. Dựa trên nhật ký gần đây, điều này chỉ xảy ra đối với các địa chỉ IP cụ thể và nó dường như cũng xảy ra nhất quán đối với những địa chỉ đó. Tôi thấy BTRS123368 và AskTbORJ / 5.15.2.23037 trong chuỗi tác nhân người dùng, có thể nó liên quan đến một trong số đó.
Jorrit Schippers

Tôi nhận được một số kết quả khác: ai đó có FunWebProducts trong tác nhân người dùng cũng đang yêu cầu / URL không xác định.
Jorrit Schippers

0

Tôi không biết liệu điều này có hữu ích hay không, nhưng trang web của tôi đang thay thế một tệp hình ảnh * .webp cụ thể bằng tệp không xác định sau khi nó được tải trong nhiều trình duyệt. Trang web của bạn có lưu trữ hình ảnh webp không?


0

Tôi đã gặp sự cố tương tự (nhưng với /nulllỗi 404 trong bảng điều khiển) mà câu trả lời của @ andrew-martinez đã giúp tôi giải quyết.

Hóa ra tôi đang sử dụng imgcác thẻ có srctrường trống :

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

Ý tưởng của tôi là ngăn trình duyệt tải hình ảnh khi tải trang để tải thủ công sau đó bằng cách đặt thuộc tính src từ thuộc tính data-src bằng javascript (tải chậm). Nhưng khi kết hợp với iDangerous Swiper, phương pháp đó đã gây ra lỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.