>  기사  >  Java  >  2020 새로운 Java 면접 질문 - Java 웹(2)

2020 새로운 Java 면접 질문 - Java 웹(2)

王林
王林앞으로
2020-06-16 17:29:392238검색

2020 새로운 Java 면접 질문 - Java 웹(2)

1. 클라이언트가 쿠키를 비활성화해도 세션을 계속 사용할 수 있나요?

쿠키와 세션은 일반적으로 두 가지 독립적인 것으로 간주됩니다. 세션은 서버 측에서 상태를 유지하는 솔루션을 사용하는 반면 쿠키는 클라이언트 측에서 상태를 유지하는 솔루션을 사용합니다. 그런데 쿠키를 비활성화하면 왜 세션을 얻을 수 없나요? 세션은 세션 ID를 사용하여 현재 대화에 해당하는 서버 세션을 결정하고, 세션 ID는 쿠키를 통해 전달되므로 쿠키를 비활성화하는 것은 세션 ID를 잃는 것과 같으므로 세션이 손실됩니다.

쿠키가 꺼져 있을 때 사용자가 세션을 사용한다고 가정합니다. 이를 달성하는 방법에는 여러 가지가 있습니다.

  • php.ini 구성 파일에서 "session.use_trans_sid = 1"을 설정하거나 "--enable"을 설정합니다. -trans-sid" 옵션을 컴파일할 때 PHP가 페이지 전체에 걸쳐 세션 ID를 자동으로 전달하도록 합니다.

  • URL을 통해 값을 수동으로 전달하고 숨겨진 양식을 통해 세션 ID를 전달합니다.

  • 세션 ID를 파일, 데이터베이스 등에 저장하고 페이지 간 프로세스 중에 수동으로 호출하세요.

2. 스프링 MVC와 스트럿의 차이점은 무엇인가요?

1. 차단 메커니즘의 차이점

Struts2는 클래스 수준 차단입니다. Spring과 통합할 때 Struts2의 ActionBean 주입 범위는 setter 및 getter를 통해 데이터를 요청합니다. 속성에 주입됩니다. Struts2에서 Action은 요청 및 응답 컨텍스트에 해당하며, 속성을 통해 수신할 수 있습니다. 이는 속성 매개변수가 여러 메소드에 의해 공유됨을 나타냅니다. Struts2의 Action 메소드는 URL에 대응할 수 있지만 해당 클래스 속성은 모든 메소드에서 공유됩니다. 이는 해당 메소드를 식별하기 위해 주석이나 다른 메소드를 사용할 수 없으며 다중 인스턴스로만 설계될 수 있음을 의미합니다.

SpringMVC는 메서드 수준 차단입니다. 한 메서드는 요청 컨텍스트에 해당하므로 메서드는 기본적으로 독립적이며 요청 및 응답 데이터에 독점적으로 액세스할 수 있습니다. 각 메소드는 동시에 URL에 해당합니다. 매개변수 전달은 메소드에 고유한 메소드에 직접 삽입됩니다. 처리 결과는 ModeMap을 통해 프레임워크로 반환됩니다. Spring 통합 중에 SpringMVC의 Controller Bean은 기본적으로 싱글톤 모드로 설정되므로 기본적으로 모든 요청에 ​​대해 하나의 Controller만 생성되므로 공유 속성이 없어야 하므로 기본 범위를 변경하려면 필요합니다. @Scope 주석 수정을 추가합니다.

Struts2에는 자체 인터셉터 메커니즘이 있습니다. SpringMVC는 독립적인 Aop 방법을 사용하므로 Struts2의 구성 파일 양이 SpringMVC보다 커집니다.

(권장 관련 튜토리얼: java 입문 프로그램)

2. 기본 프레임워크의 차이점

Struts2는 Filter(StrutsPrepareAndExecuteFilter)로 구현되는 반면 SpringMVC(DispatcherServlet)는 Servlet으로 구현됩니다. 컨테이너가 시작된 후 필터가 초기화됩니다. 서블릿보다 나중에 서비스가 중지된 후 충돌이 발생합니다. 서블릿은 Filter가 호출되기 전에 호출될 때 초기화되고, 서비스가 중지된 후에는 소멸됩니다.

3. 성능 측면에서

Struts2는 클래스 수준 차단입니다. 각 요청은 SpringMVC의 메서드 기반 차단으로 인해 모든 속성 값 주입을 로드해야 하는 인스턴스의 새 작업에 해당합니다. , 단일 로드가 있습니다. 예제 패턴 Bean 주입입니다. 따라서 SpringMVC 개발 효율성과 성능은 Struts2보다 높습니다.

4. 구성 측면에서

spring MVC와 Spring은 원활합니다. 이 프로젝트의 관리 및 보안도 Struts2보다 높습니다.

3.SQL 주입을 피하는 방법은 무엇입니까?

  • PreparedStatement(간단하고 효과적인 방법)

  • 정규식을 사용하여 들어오는 매개변수 필터링

  • 문자열 필터링

  • JSP에서 이 함수를 호출하여 잘못된 문자가 포함되어 있는지 확인하세요

  • J SP 페이지 판단 코드

4. XSS 공격이란 무엇이며 어떻게 방지할 수 있나요?

CSS라고도 알려진 XSS 공격, 전체 이름 Cross Site Script(교차 사이트 스크립팅 공격)는 공격자가 XSS 취약점이 있는 웹 사이트에 악성 HTML 코드를 입력하는 것입니다. 사용자가 웹 사이트를 탐색할 때 이 HTML이 나타납니다. 공격 목적을 달성하기 위해 코드가 자동으로 실행됩니다.

XSS 공격은 SQL 주입 공격과 유사합니다. SQL 문은 데이터를 쿼리/수정/삭제하기 위한 사용자 입력으로 사용됩니다. XSS 공격에서는 사용자의 브라우저를 제어하고 이에 대한 일부 정보를 얻습니다. 사용자. XSS는 웹 프로그램의 일반적인 취약점입니다. XSS는 클라이언트 측에서 사용되는 수동적 공격 방법입니다.

XSS 방지의 일반적인 개념은 입력(및 URL 매개변수)을 필터링하고 출력을 인코딩하는 것입니다.

(추천 동영상 튜토리얼: java 동영상 튜토리얼)

5. CSRF 공격이란 무엇이며 이를 방지하는 방법은 무엇인가요?

CSRF(교차 사이트 요청 위조)는 원클릭 공격 또는 세션 라이딩이라고도 합니다. 전체 중국어 이름은 교차 사이트 요청 위조입니다. 일반적으로 공격자는 사용자의 브라우저에서 요청을 위조하여 사용자가 방문을 인증한 웹사이트로 전송함으로써, 대상 웹사이트가 이를 수신하고 이를 사용자의 실제 작업으로 착각하여 명령을 실행하게 합니다. 일반적으로 계정 도용, 자금 이체, 허위 메시지 전송 등에 사용됩니다. 공격자는 이러한 공격을 수행하기 위해 웹사이트의 요청 확인 취약점을 악용합니다. 웹사이트에서는 해당 요청이 사용자의 브라우저에서 비롯된 것인지는 확인할 수 있지만, 해당 요청이 사용자의 진정한 의도에서 비롯된 것인지는 확인할 수 없습니다.

피하는 방법:

1. HTTP Referer 필드를 확인하세요.

HTTP 헤더의 Referer 필드는 HTTP 요청의 소스 주소를 기록합니다. 일반적인 상황에서 보안이 제한된 페이지에 대한 액세스 요청은 동일한 웹사이트에서 이루어지며, 해커가 해당 페이지에 CSRF 공격을 구현하려는 경우 일반적으로 자신의 웹사이트에서만 요청을 구성할 수 있습니다. 따라서 Referer 값을 검증함으로써 CSRF 공격을 방어할 수 있다.

2. 인증 코드 사용

요청을 받은 후 백그라운드에서 인증 코드를 판단하여 CSRF를 방지할 수 있습니다. 하지만 이 방법은 사용자 친화적이지 않습니다.

3. 요청 주소에 토큰을 추가하고 확인합니다.

CSRF 공격이 성공한 이유는 해커가 사용자의 요청을 완전히 위조할 수 있기 때문입니다. 요청에 포함된 모든 사용자 확인 정보가 쿠키에 존재하기 때문입니다. 이러한 검증정보를 알지 못한 채, 이용자 자신의 쿠키를 직접 사용하여 보안검증을 통과하게 됩니다.

CSRF에 저항하려면 해커가 위조할 수 없는 정보를 요청에 넣는 것이 핵심이며, 이 정보는 쿠키에 존재하지 않습니다. 무작위로 생성된 토큰을 HTTP 요청에 매개변수로 추가하고, 서버 측에 인터셉터를 구축하여 요청에 토큰이 없거나 토큰 내용이 잘못된 경우 발생할 수 있다고 간주됩니다. CSRF 공격이 발생하면 요청이 거부됩니다.

이 방법은 사용자가 로그인하여 세션에 배치된 후 추천자를 확인하는 것보다 더 안전합니다. 그런 다음 토큰은 요청 시 세션에서 제거되고 요청의 토큰과 비교됩니다. 이 방법의 어려움은 매개변수 형식으로 요청에 토큰을 추가하는 방법입니다.

GET 요청의 경우 토큰이 요청 주소에 추가되어 URL이

http://url?csrftoken=tokenvalue

가 됩니다. POST 요청의 경우 양식 끝에

<input type="hidden" name="csrftoken" value="tokenvalue"/>

를 추가하면 토큰이 다음과 같이 요청에 추가됩니다. 매개변수.

4. HTTP 헤더의 속성을 사용자 지정하고 확인합니다.

이 방법도 토큰을 사용하여 확인합니다. 이전 방법과 달리 토큰은 매개 변수 형식으로 HTTP 요청에 배치됩니다. HTTP 헤더의 사용자 정의 속성에 있습니다. XMLHttpRequest 클래스를 통해 이 유형의 모든 요청에 ​​csrftoken HTTP 헤더 속성을 한 번에 추가하고 여기에 토큰 값을 넣을 수 있습니다.

이것은 이전 방법에서 요청에 토큰을 추가하는 불편함을 해결함과 동시에 XMLHttpRequest를 통해 요청한 주소는 브라우저의 주소 표시줄에 기록되지 않으며 토큰이 유출될 염려가 없습니다. 추천자를 통한 다른 웹사이트.

더 많은 관련 면접 질문을 알고 싶다면 java 면접 질문 칼럼을 방문해주세요.

위 내용은 2020 새로운 Java 면접 질문 - Java 웹(2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제