웹 사이트에서 어떤 프로그래밍 언어를 사용하는지 알 수 있습니까?


48

예를 들어 stackexchange.com웹 사이트 개발에 대한 정보를 사이트 소유자 나 Google에 묻지 않고 백엔드에서 어떤 언어가 사용되는지 알 수 있습니까?

.extension예를 들어, 웹 사이트에는 .php에서 개발 된 것을 나타낼 수 있는 막대 가 PHP없지만 확장명이 없으면 어떻게 알 수 있습니까?


43
URL로 요청 된 파일의 확장자가 파일 시스템의 파일에 직접 맵핑 될 필요는 없습니다. .phpC로 작성된 CGI-Script 또는 Java로 작성된 서블릿 과 같은 확장을 쉽게 쉽게 매핑 할 수 있습니다 .
maple_shaft

1
@Jeroen Community Wiki는 제안한대로 사용하지 않아야합니다 . 나는 과거와 같이 일반적으로 악용되었다는 것을 알고 있지만, 그 점을 잊어 버리려고 노력합시다.
yannis

6
엄밀히 말하면 불가능합니다. 대부분의 언어는 찾고있는 "이야기"표시를 포함하여 다른 언어를 완전히 에뮬레이션 할 수 있습니다.
emory

2
순진한 관점에서이 정보의 적용을 볼 수 없습니다. 이 정보로 무엇을 하시겠습니까?
tehnyit

5
또한 악용에 취약한 사이트를 찾습니다.
Erik Reppen

답변:


82

표시기가 있습니다. 일부는 찾기 쉽고 다른 것은 찾기가 어렵습니다.

  • 파일 확장자 : .php사이트가 PHP로 작성 .asp되었음을 나타냅니다. 클래식 ASP를 .aspx나타냅니다. ASP.NET을 .jsp나타냅니다. Java JSP를 나타냅니다.
  • 쿠키 이름 : JSESSIONIDJava 서버에서 널리 사용되는 쿠키 이름입니다
  • 헤더 : 일부 시스템은 응답에 HTTP 헤더를 추가합니다
  • 특정 HTML 컨텐츠 :
    • Drupal과 같은 CMS에서 사용하는 일관된 클래스 이름 지정 체계를 가진 많은 div 래퍼와 같은 패턴.
    • 직접 또는 간접적으로 도구 사용을 나타내는 헤드의 HTML 또는 메타 태그의 주석
  • 기본 오류 메시지 또는 오류 페이지 디자인 (예 : 가짜 URL을 핑하여 404 확인)
  • 경우에 따라 단서를 제공하는 버전 관리를 위해 주석 태그가 페이지에 배치되는 경우가 있습니다
  • ...

그러나 이들 모두 제거 / 변경 / 가짜 수 있습니다. 일부는 다른 것보다 변경하기가 쉽지만 100 % 신뢰할 수있는 것은 없습니다.

이러한 지표를 변경하는 데는 여러 가지 이유가 있습니다.

  • 기본 기술을 변경했지만 URL을 변경하고 싶지 않습니다
  • 기술에 대한 정보를 가능한 한 적게 제공하려고합니다
  • 알려진 플랫폼 차원의 취약점이 발견 / 공개 될 때 스크립트 키디 버스의 첫 번째 정류장이 아닙니다.
  • "현재"인 것처럼 보이기를 원합니다 (현재 확장 기능이없는 REST 스타일 URL이 있음을 의미하더라도).
  • ...

11
에 해당하는 PHP JSESSIONIDPHPSESSID입니다.
yannis 2016 년

6
분석을 수행하는 도구가 많이 있습니다. 예 : wappalyzer.com
user123444555621

1
Django 사이트에서 방금 wappalyzer를 테스트했습니다 .JQuery와 Google Analytics만이 감지되었습니다. 사내 프레임 워크가있는 PHP 사이트는 전혀 감지하지 못했습니다.
vartec

내 답변을 추가하기에는 너무 철저합니다. 또한 HTML 패턴 (특히 CMS는 일관되게 명명 된 클래스를 가진 많은 가비지 래퍼를 추가하는 경향이 있음)과 메타 태그 (댓글도 사용되었지만 언급했다).
Erik Reppen 2016 년

1
@OP, 자동화 시스템에서 사용중인 것을 분류하고 분류하는 첫 번째 방법으로 세션 쿠키를 확실히 목표로합니다. 덜 분명한 프레임 워크가 지속적으로 보여줄 가능성이 있지만 100 % 신뢰할 수있는 것은 없습니다.
Erik Reppen

8

개발자가 사이트 개발에 대한 정보를 제공하는 도메인에 게시 할 수있는 humans.txt 파일이 있습니다.이 사이트를 누가 작업했는지, 어떤 표준 또는 도구를 사용 했는지도 알 수 있습니다. 그들이 당신이 그런 종류의 정보에 대해 알고 싶다면 정보를 넣어야합니다. 그러나 다른 것과 마찬가지로 이것은 선택 사항이므로 알려주지 않을 수도 있습니다. humans.text를 확인하십시오


4

웹 마스터가 공개하고 싶지 않다면 불가능하지는 않지만 오히려 힘들 수 있습니다. 몇 가지 프레임 워크에는 몇 가지 특성이 있지만 숨길 수 있습니다.

  • 파일 확장자 : 표준을 사용하는 실제적인 이유는 없으며, 대부분의 최신 MVC는 어쨌든 URL 라우팅을 사용합니다. 따라서 사이트가 한동안 존재하지 않는 한, 아마도 아무것도 보지 못할 것입니다 (예 : stackexchange는 .aspx확장을 사용하지 않습니다 ).

  • 세션 ID : 예를 들어 PHPSESSIDPHP의 기본값이지만 쉽게 무시할 수 있습니다 .

  • 웹 서버 및 스크립팅 언어 버전이있는 헤더 : 해제 하거나 위조 할 수 있습니다 .

숨기기 어려운 물건 :

  • PHP는 []이름 에 추가 하여 동일한 쿼리 문자열 변수에 대한 여러 값을 처리 하므로 다음과 같은 내용이 표시 ...?var[]=1&var[]=3&...됩니다. AFAIK는 이런 방식으로 처리하는 유일한 웹 프레임 워크입니다.

PHP를 웹 프레임 워크라고 부릅니까? 그것은 일반적으로 그렇게 사용되지는 않지만 웹보다 더 많은 일을 할 수있는 튜링 완성 언어입니다.
sakisk

@faif : 다른 언어 구문 분석 쿼리 문자열은 웹 프레임 워크의 일부입니다. Rasmus Lerdorf조차도 PHP를 웹 프레임 워크로 간주합니다. 저자보다 잘 아십니까?
vartec

그것이 그가 처음에 생각했던 것이지만, 나는 오늘 PHP가 훨씬 더 많은 것을 할 수 있다고 생각합니다. 정확성을 위해 PHP를 웹 프레임 워크라고하지 않습니다. 이 경우 CakePHP, codeigniter 등은 무엇입니까? 웹 프레임 워크의 웹 프레임 워크? :)
sakisk

1
나는 당신의 요점을 얻지 못합니다. PHP는 언어 자체에 내장 된 웹 프레임 워크의 핵심 기능을 가진 언어입니다. 받아 들여.
vartec

4

한마디로 :이다 가능 하면 백 엔드에 사용하고있는 언어를 숨 깁니다. 간단한 예 : "Hello World"페이지를 고려하십시오. 백엔드에서 어떤 프레임 워크 / 언어가 사용되는지 파악하기가 매우 어렵습니다 (세션 쿠키와 같은 기본 항목이 수동으로 설정되어 있거나 사용 중이 아니라고 가정).

그러나 프레임 워크의 핵심은 기능을 다시 구현하고 표준화 된 방식으로 작업 할 수 있도록하는 것입니다. 거의 모든 프레임 워크에는 세부적인 작은 이야기가있어 충분히 가까이 보이면 사라지게됩니다. 다른 사람들이 지적했듯이 구성을 사용하거나 다양한 표준 기능을 다시 구현하여 숨길 수 있습니다. 그럼에도 불구하고, 나는 큰 사이트의 경우 모든 것을 완전히 숨기는 것이 매우 어려울 것이라고 주장했습니다. 그것을 달성하더라도 프레임 워크를 거의 사용하지 않을 것입니다.

요약하자면, (아래의 신중한 검토와 proding으로) 사용되는 것에 대해 아주 좋은 아이디어를 얻는 것이 거의 항상 가능하다고 말하고 싶습니다. 사용 된 프레임 워크를 숨기는 것이 가능하지만 대규모 사이트에서는 신속하게 실행 불가능합니다.

이전 답변에는 프레임 워크와 언어가 가지고있는 다양한 이야기에 대한 좋은 예가 있습니다. 다양한 뷰 엔진에 특정 공백 관련 동작이 있으며이를 식별하는 데 사용할 수 있다고 덧붙이고 싶습니다. MVC3 +에 사용 된 Razor 엔진에는이를 식별하거나 적어도 용의자 목록을 좁히는 데 사용할 수있는 상당히 구체적인 특징이 있습니다.


4

이것이 귀하의 질문에 구체적으로 답변하는지는 모르겠지만 Wappalyzer 에게 정말 도움이되는 도구가 있습니다. 웹 사이트에서 사용되는 기술을 밝히는 Firefox / Chrome 확장입니다. 컨텐츠 관리 시스템, 웹 서버, JavaScript 프레임 워크, 분석 도구 등을 감지합니다. 나는 당신이 찾고있는 것이 아니라 사이트가 무엇을 사용하는지에 대한 매우 가까운 아이디어를 제공한다는 것을 알고 있습니다. 이것이 프로그래머에게 보여주는 것입니다.

와플 라이저


하하, 나는 내 블로그를 방문했고 Apache 2 / PHP 5.5.9라고 말했지만 자신이 만든 ASP.NET MVC 블로그라고 확신합니다. 트롤링 이유로 인해 'X-Powered-By : ASP.NET'응답 헤더를 PHP로 변경했습니다.
Lars

1

서버 기술에 대한 단서가 클라이언트에게 보이지 않도록 그런 방식으로 사이트를 작성할 수 있습니다.

그러나 누군가가 IceFaces for Java 와 같은 일부 프레임 워크를 사용하는 경우 요청에서 이와 비슷한 것을 볼 수 있기 때문에 실제로는 불가능합니다.

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

다른 프레임 워크의 대부분은 페이지 본문 또는 요청 / 응답에 특성 스탬프가 있습니다. 구글을 찾으면 답을 얻을 수 있습니다.

그러나 각 언어에서 Java를 처음부터 HTML로 작성하기로 선택한 경우 (예 : 속도 템플릿) 서버가 JSON 메시지 만 반환 / 수락하고 클라이언트는 완전히 JavaScript로되어있는 순수한 AJAX 방식을 선택합니다. , 기술을 드러내는 캐치되지 않은 예외가 발생할 때까지.


0

본격적인 프레임 워크 또는 CMS를 사용하는 사이트에서는 때때로 관리자 페이지를 쿼리 할 수 ​​있습니다. 대부분의 사람들이 관리자 템플릿을 변경하지 않기 때문에 로그인 상자가 표시되고 그 프레임 워크가 무엇인지 식별 ​​할 수 있습니다. 예를 들어 사이트가 example.com 인 경우 example.com/admin/ 또는 example.com/wp-admin/(wordpress)으로 이동하십시오.



-5

웹 페이지의 소스 코드를보고 언어의 존재를 검색하여 웹 사이트에서 사용되는 언어를 찾을 수 없습니다. 높은 보안을 제공하기 위해 웹 사이트를 만들기 위해 여러 언어를 사용하기 때문에

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