Có thể biết ngôn ngữ lập trình mà một trang web sử dụng không?


48

Ví dụ stackexchange.com:, không hỏi chủ sở hữu trang web hoặc Google thông tin của họ về việc phát triển trang web, liệu có thể biết ngôn ngữ nào được sử dụng ở mặt sau không?

Có vẻ như, trang web không có .extensionthanh, ví dụ .phpcó thể chỉ ra cái nào được phát triển PHP, nhưng không có phần mở rộng, làm sao tôi biết điều đó?


43
Cần lưu ý rằng phần mở rộng của tệp được yêu cầu bằng URL không cần ánh xạ trực tiếp đến tệp trên hệ thống tệp. Mọi người có thể dễ dàng ánh xạ một phần mở rộng như .phpCGI-Script được viết bằng C hoặc Servlet được viết bằng Java.
maple_shaft

1
@Jeroen Community Wiki không được sử dụng như bạn đề xuất . Tôi biết nó thường bị lạm dụng như vậy trong quá khứ, nhưng chúng ta hãy cố gắng quên đi điều đó ...
yannis

6
Nói đúng ra là không thể. Hầu hết mọi ngôn ngữ đều có thể mô phỏng hoàn toàn một ngôn ngữ khác - bao gồm mọi dấu hiệu "kể chuyện" mà bạn có thể đang tìm kiếm.
emory

2
Từ quan điểm ngây thơ của tôi, tôi không thể thấy một ứng dụng của thông tin này. Bạn sẽ làm gì với thông tin này?
tehnyit

5
Ngoài ra, việc tìm kiếm các trang web dễ bị khai thác.
Erik Reppen

Câu trả lời:


82

Có chỉ số. Một số dễ tìm hơn, số khác khó hơn.

  • phần mở rộng tệp: .phpbiểu thị rằng trang web được viết bằng PHP, .aspbiểu thị ASP cổ điển, .aspxbiểu thị ASP.NET, .jspbiểu thị Java JSP, ...
  • tên cookie: JSESSIONIDlà tên cookie được sử dụng rộng rãi trong các máy chủ Java
  • tiêu đề: một số hệ thống thêm tiêu đề HTTP vào phản hồi của họ
  • nội dung HTML cụ thể:
    • các mẫu như nhiều trình bao bọc div với sơ đồ đặt tên lớp nhất quán được sử dụng bởi các CMS như Drupal.
    • nhận xét trong các thẻ HTML hoặc thẻ meta trong đầu trực tiếp / gián tiếp cho biết việc sử dụng công cụ
  • Thông báo lỗi mặc định hoặc thiết kế trang lỗi (ví dụ: ping URL giả để xem 404 của chúng)
  • Đôi khi các thẻ nhận xét được đặt trong trang cho mục đích tạo phiên bản cung cấp manh mối
  • ...

Nhưng tất cả những thứ đó có thể được gỡ bỏ / thay đổi / làm giả. Một số dễ thay đổi hơn những cái khác, nhưng không cái nào đáng tin cậy 100%.

Có nhiều lý do để thay đổi các chỉ số đó:

  • Bạn thay đổi công nghệ cơ bản nhưng không muốn thay đổi URL của mình
  • Bạn muốn cung cấp càng ít thông tin về công nghệ của bạn càng tốt
  • (liên quan đến trước đó) Bạn không muốn là điểm dừng đầu tiên cho xe buýt kiddie kịch bản khi các lỗ hổng trên toàn nền tảng được biết đến được phát hiện / công khai
  • Bạn muốn có vẻ "trong" (thậm chí 'mặc dù điều đó hiện có nghĩa là có các URL kiểu REST không có tiện ích mở rộng).
  • ...

11
PHP tương đương với JSESSIONIDPHPSESSID.
yannis

6
Có rất nhiều công cụ hiện đang thực hiện phân tích, ví dụ wappalyzer.com
user123444555621

1
Chỉ cần thử nghiệm wappalyzer trên một trang web Django - điều duy nhất nó phát hiện ra là JQuery và Google Analytics. Và trang web PHP với khung công tác nội bộ, nơi nó không phát hiện thấy gì cả.
vartec

Quá kỹ lưỡng để thêm câu trả lời của riêng tôi. Tôi cũng sẽ thêm các mẫu HTML (đặc biệt là các CMS có xu hướng thêm nhiều trình bao bọc rác với các lớp được đặt tên liên tục) và rất nhiều công cụ (chủ yếu là nhảm nhí) muốn thông báo rằng chúng đã được sử dụng trong thẻ meta (cũng là nhận xét, nhưng điều đó Đã được đề cập).
Erik Reppen

1
@OP, tôi chắc chắn sẽ nhắm mục tiêu cookie phiên là cách đầu tiên để thử và sắp xếp những gì được sử dụng trong một hệ thống tự động. Đó là một điều mà các khung ít rõ ràng hơn có khả năng nhất quán hiển thị nhưng như đã nói, không có gì đáng tin cậy 100%.
Erik Reppen

8

Chà, có tệp human.txt mà nhà phát triển có thể đưa lên tên miền cung cấp một số thông tin về phát triển trang web, có thể ai đã làm việc với nó và những tiêu chuẩn hoặc công cụ nào đã được sử dụng. Nếu họ muốn bạn biết về những loại thông tin đó, họ có thể / nên đặt nó ở đó. Tuy nhiên, cũng giống như mọi thứ khác, đây là tùy chọn nên không thể đảm bảo thông báo cho bạn. Kiểm tra con người.


4

Không, nó khá khó nếu không thể nếu quản trị trang web không muốn tiết lộ. Có một số đặc điểm của một vài khung công tác, nhưng chúng có thể bị ẩn đi.

  • phần mở rộng tệp: không có lý do thực sự để sử dụng các tiêu chuẩn và hầu hết các MVC hiện đại đều sử dụng định tuyến URL. Vì vậy, trừ khi trang web đã xuất hiện được một thời gian, có lẽ bạn sẽ không thấy bất kỳ trang nào (ví dụ: stackexchange không sử dụng .aspxtiện ích mở rộng);

  • ID phiên: ví dụ PHPSESSIDlà mặc định cho PHP, nhưng có thể dễ dàng bị ghi đè ;

  • tiêu đề với máy chủ web và phiên bản ngôn ngữ kịch bản: có thể được tắt hoặc thậm chí giả mạo.

Những thứ khó giấu hơn:

  • PHP xử lý nhiều giá trị cho cùng một biến chuỗi truy vấn bằng cách thêm []vào tên, do đó bạn sẽ thấy một cái gì đó như : ...?var[]=1&var[]=3&.... AFAIK, đó là khung web duy nhất xử lý theo cách đó.

Bạn đang gọi PHP là một khung web? Đó là một ngôn ngữ hoàn chỉnh Turing có thể được sử dụng để làm nhiều hơn các công cụ web (mặc dù nó thường không được sử dụng như vậy)
sakisk

@faif: trong bất kỳ chuỗi truy vấn phân tích ngôn ngữ nào khác là một phần của khung web. Ngay cả Rasmus Lerdorf cũng coi PHP là một khung web. Bạn biết rõ hơn thì tác giả?
vartec

Đó là những gì anh ấy có trong đầu, nhưng tôi nghĩ rằng PHP có thể làm được nhiều hơn thế. Để cho chính xác, tôi sẽ không gọi PHP là một khung web. Trong trường hợp đó CakePHP, codeigniter, v.v. là gì? Khung web của khung web? :)
sakisk

1
Tôi không nhận được quan điểm của bạn. PHP là ngôn ngữ có chức năng cốt lõi của khung web được nhúng trong chính ngôn ngữ đó. Đối phó với nó.
vartec

4

Tóm lại: Có thể ẩn ngôn ngữ bạn đang sử dụng ở mặt sau. Ví dụ tầm thường: xem xét trang "Hello World"; sẽ cực kỳ khó khăn để tìm ra khuôn khổ / ngôn ngữ nào đang được sử dụng ở mặt sau (giả sử các công cụ cơ bản như cookie phiên được đặt thủ công hoặc không sử dụng).

Tuy nhiên, quan điểm của các khung là để tiết kiệm cho bạn phải thực hiện lại chức năng và để bạn làm việc theo cách tiêu chuẩn hóa. Hầu như tất cả các khung đều có những câu chuyện nhỏ cụ thể của họ sẽ cho họ đi, nếu bạn nhìn đủ gần. Như những người khác đã chỉ ra, có thể cố gắng che giấu những điều này, bằng cách sử dụng cấu hình hoặc thực hiện lại các tính năng tiêu chuẩn khác nhau. Tuy nhiên, tôi cho rằng đối với các trang web lớn, sẽ cực kỳ khó khăn để che giấu hoàn toàn mọi thứ và ngay cả khi bạn hoàn thành điều đó, bạn sẽ sử dụng rất ít khuôn khổ của mình.

Tóm lại, tôi muốn nói rằng hầu như luôn luôn có thể có được một ý tưởng rất tốt về những gì đang được sử dụng bên dưới (với một số kiểm tra cẩn thận và prodding). Ẩn khung được sử dụng là có thể, nhưng nhanh chóng trở nên không khả thi đối với các trang web lớn.

Các câu trả lời trước có một số ví dụ hay về những câu chuyện kể khác nhau mà khung và ngôn ngữ có. Tôi muốn thêm rằng các công cụ xem khác nhau có hành vi liên quan đến khoảng trắng cụ thể có thể được sử dụng để xác định chúng. Công cụ dao cạo được sử dụng trong MVC3 + có một số quirks khá cụ thể có thể được sử dụng để xác định nó, hoặc ít nhất, thu hẹp danh sách các nghi phạm (một lần nữa, bạn có thể sử dụng nó, nhưng sau đó, bạn có đang sử dụng nó không?).


4

Tôi không biết nếu điều này đặc biệt trả lời câu hỏi của bạn nhưng có một công cụ thực sự hữu ích với tôi: Wappalyzer . Đây là một tiện ích mở rộng Firefox / Chrome giúp khám phá các công nghệ được sử dụng trên các trang web. Nó phát hiện các hệ thống quản lý nội dung, máy chủ web, khung JavaScript, công cụ phân tích và nhiều thứ khác. Tôi biết không chính xác những gì bạn đang tìm kiếm nhưng nó cung cấp cho bạn một ý tưởng rất gần gũi về những gì một trang web sử dụng. Đây là những gì nó hiển thị cho lập trình viên.stackexchange.com

Wappalyzer


Ha ha, tôi đã truy cập blog của mình và nó nói Apache 2 / PHP 5.5.9, nhưng tôi khá chắc chắn rằng đó là blog ASP.NET MVC của riêng bạn, vì tôi đã tạo ra nó. Bởi vì lý do trolling, tôi đã thay đổi tiêu đề phản hồi 'X-Powered-By: ASP.NET' thành PHP.
Lars

1

Có thể viết một trang web theo cách như vậy, không có manh mối nào về công nghệ máy chủ sẽ hiển thị cho khách hàng.

Tuy nhiên, khi ai đó sử dụng một số khung công tác, chẳng hạn như IceFaces cho Java , thực tế không thể làm được vì bạn sẽ thấy một cái gì đó giống như vậy trong các yêu cầu của bạn:

ice.submit.partial=true&ice.session=c4f4jxT36tM_38848488&ice.view=3&ice.focus=&rand=0.322803445

Phần lớn các khung khác có tem đặc trưng của chúng trong thân trang hoặc yêu cầu / phản hồi. Tìm chúng, google và bạn sẽ có câu trả lời.

Tuy nhiên, trong mỗi ngôn ngữ, nếu bạn chọn tạo HTML từ đầu (trong thế giới Java, một ví dụ sẽ là các mẫu vận tốc ) hoặc chọn cách AJAX thuần túy, trong đó máy chủ trả về / chỉ chấp nhận các thông báo JSON và máy khách hoàn toàn bằng JavaScript - một cách khó khăn , cho đến khi bạn gây ra ngoại lệ chưa từng có cho thấy công nghệ dưới.


0

Trên các trang web sử dụng khung công tác đầy đủ hoặc CMS, đôi khi bạn có thể thử truy vấn trang quản trị, bạn sẽ được cung cấp hộp đăng nhập và xác định khung đến từ đâu vì hầu hết mọi người không nối lại mẫu quản trị viên. Ví dụ: nếu trang web của bạn là example.com, hãy thử truy cập example.com/admin/ hoặc example.com/wp-admin/ (wordpress).



-5

Không, không thể tìm thấy ngôn ngữ được sử dụng trong các trang web bằng cách xem mã nguồn của trang web và tìm kiếm sự tồn tại của ngôn ngữ. do sử dụng nhiều hơn một ngôn ngữ để tạo trang web để cung cấp bảo mật cao

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.